SVM可用于分类和回归。
需要训练数据和测试数据的数据及标签。
clear; clc; close all; %训练数据及标签 data = [176 70;180 80;161 45;163 47;]; label = [1;1;-1;-1]; model = svmtrain(label,data); %测试数据及标签 testdata = [190 85]; testdatalabel = -1; [predictlabel,accurary,decision_values] = svmpredict(testdatalabel,testdata,model); predictlabel if 1 == predictlabel disp('==该生为男生'); end if -1 == predictlabel disp('==该生为女生'); end
model = svmtrain(label,data,parameters);
该方法中常见参数为c、g、t;
t为核函数;
c为惩罚参数;
g为核函数参数;
[predictlabel,accurary,decision_values] = svmpredict(label,data,model);
accuracy =
99.6296
0.0148
0.9851
返回参数accuracy从上到下的意义依次是:
分类准确率
平均平法误差(mean squared error,MSE)
平方相关系数(squared correlation coefficient,r2)
分类问题和回归问题本质是一样的,就是有一个输入(属性矩阵或者自变量)又有输出(分类输出是分类标签,回归输出是因变量),也就是相当于一个函数映射:y = f(x)
下面实例中x相当于上面分类小例子中的属性矩阵data,y相当于小例子中的label;相应的回归问题中x就是自变量,y就是因变量。
<pre name="code" class="plain">clear; clc; close all;%生成待回归的数据x = (-1:.1:1)';y = -x.^2;%建模回归模型model = svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');%利用建立的模型看其在训练集合上的回归效果[py,mse,prob_estimates] = svmpredict(y,x,model);scrsz = get(0,'ScreenSize');figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);plot(x,y,'o');hold on;plot(x,py,'r*');legend('原始数据','回归数据');grid on;%进行测试testx = 1.1;display('真实数据');testy = -testx.^2;[ptesty,tmse,prob_estimates] = svmpredict(testy,testx,model);display('预测数据');ptesty