由于要用SVM实现多分类,而matlab自带的SVM只能实现二分类,使用libsvm就可以实现多分类,下载地址如下:
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
/////-------------------------------------------------安装-------------------------////
下载完成后解压到matlab目录:D:\MATLAB2013\toolbox下面,然后切换workspace到这个目录,然后在命令行里面输入:mex -setup,选择编译器。
然后将当前目录设置成:D:\MATLAB2013\toolbox\libsvm-3.21\matlab
在命令行里面输入:make,这个时候你会看到当前目录生成了四个二进制文件:
clc;在workspace输出如下:
clear;
[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
model = svmtrain(heart_scale_label,heart_scale_inst)
[predict_label,accuracy,dec_values] = svmpredict(heart_scale_label,heart_scale_inst,model)
model =代表运行成功,就可以在matlab中使用libsvm了!
Parameters: [5x1 double]
nr_class: 2
totalSV: 132
rho: 0.4245
Label: [2x1 double]
sv_indices: [132x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [132x1 double]
SVs: [132x13 double]
Accuracy = 86.6667% (234/270) (classification)
以下为自定义数据测试:
% X为300*2 矩阵 2个特征 300个样本
group=zeros(300,1);
for i=1:300
if i<=100 %第一类
group(i)=1;
else if i<=200 %第二类
group(i)=2;
else
group(i)=3; %第三类
end
end
end
svmStruct=svmtrain(group,X,'-s 0 -t 2 -c 1.2 -g 2.8')%train
[predict_label, accuracy, dec_values] =svmpredict(group, X, svmStruct) % test
输出如下代表运行成功:
svmStruct =
Parameters: [5x1 double]
nr_class: 3
totalSV: 144
rho: [3x1 double]
Label: [3x1 double]
sv_indices: [144x1 double]
ProbA: []
ProbB: []
nSV: [3x1 double]
sv_coef: [144x2 double]
SVs: [144x2 double]
Accuracy = 100% (300/300) (classification)
其中Accuracy代表识别精度,这里为100%,因为这里把训练数据作为了测试数据。