matlab SVM有监督学习

来源:互联网 发布:斯凯奇淘宝旗舰店真假 编辑:程序博客网 时间:2024/06/04 19:42

SVM

在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。

SVM 百度百科

简单应用实例及matlab代码

*参考 :
1. http://blog.sina.com.cn/s/blog_71152aa70101tl62.html
2. http://www.cnblogs.com/darkknightzh/p/5554551.html
* 说明. matlab 版本: matlab_R2015a
**数据集: http://pan.baidu.com/s/1eRTNhXw,将参考1中数据集重新命名便于直接导入。
–icesongqiang

clear all;clc;%%   数据集已经整理,直接loadload ('bedroom.mat')     % bedroomload ('forest.mat')      % forestload ('labelset.mat')    % labelsetdataset = [bedroom; forest];%%%% 训练集和测试集获取% 取bedroom,forest的前5行作为训练集train_set = [dataset(1:5, :); dataset(11:15, :)];% 相应的训练集的标签train_set_label = [labelset(1:5); labelset(11:15)];% 将第一类的6-10,第二类的16-20,做为测试集test_set = [dataset(6:10, :); dataset(16:20, :)];% 相应的测试集的标签test_set_label = [labelset(6:10); labelset(16:20)];%%%% 数据预处理,将训练集和测试集归一化到[0,1]区间[mtrain, ntrain] = size(train_set);[mtest, ntest] = size(test_set);test_dataset = [train_set; test_set];% mapminmax为matlab自带的归一化函数[dataset_scale, ps] = mapminmax(test_dataset', 0, 1)dataset_scale = dataset_scale';train_set = dataset_scale((1:mtrain), :);test_set = dataset_scale((mtrain+1):(mtrain+mtest), :);%%%% SVM网络训练model = svmtrain(train_set, train_set_label,'kernel_function','linear','showplot',true);%% SVM网络预测[predict_label] = svmclassify(model, test_set, 'showplot', true);%% 结果分析% 测试集的实际分类和预测分类图figure;hold on;plot(test_set_label,'o');plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');title('测试集的实际分类和预测分类图','FontSize',12);grid on;

测试结果

一些说明

  1. 最开始使用 参考1中
model = svmtrain(train_set_label, train_set, '-s 2 -c 1 -g 0.07');

会报出错误,个人感觉也应该是训练集参数在第一位,于是参考2中的

svmModel = svmtrain(trainData, trainLabel,'kernel_function','linear','showplot',true);

符合

SVMSTRUCT = svmtrain(TRAINING, Y, 'PARAM1',val1, 'PARAM2',val2, ...)

形式;
2. 参考1中

[predict_label] = svmpredict(test_set_labels, test_set, model);

没有svmpredict()函数,使用参考2中

predict_label = svmclassify(svmModel,testData,'showplot',true);

通过。

搞清楚了,原来上面是使用的matlab自带的SVM库,而参考1使用的libSVM,libSVM与matlab自带的SVM的区别参考3:
*参考3:
http://blog.sina.com.cn/s/blog_64b046c701018c8n.html

复制原文如下:
1 MATLAB自带的svm实现函数仅有的模型是C-SVC(C-support vector classification); 而libsvm工具箱有C-SVC(C-support vector classification),nu-SVC(nu-support vector classification),one-class SVM(distribution estimation),epsilon-SVR(epsilon-support vector regression),nu-SVR(nu-support vector regression)等多种模型可供使用。
2 MATLAB自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题。
3 MATLAB自带的svm实现函数仅支持二分类问题,多分类问题需按照多分类的相应算法编程实现;而libsvm采用1v1算法支持多分类。
4 MATLAB自带的svm实现函数采用RBF核函数时无法调节核函数的参数gamma,貌似仅能用默认的;而libsvm可以进行该参数的调节。
5 libsvm中的二次规划问题的解决算法是SMO;而MATLAB自带的svm实现函数中二次规划问题的解法有三种可以选择:经典二次方法;SMO;最小二乘。(这个是我目前发现的MATLAB自带的svm实现函数唯一的优点~)

而 libSVM的安装可以参考其他,不做其他深入了解。

1 0
原创粉丝点击