SVM实现多分类:libsvm的安装以及使用

时间:2020-12-14 06:46:36

由于要用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,这个时候你会看到当前目录生成了四个二进制文件:

libsvmread.mexw64

libsvmwrite.mexw64

svmpredict.mexw64

svmtrain.mexw64

将当前目录添加到matlab路径即可。


/////-------------------------------------------------使用-------------------------////

注意到D:\MATLAB2013\toolbox\libsvm-3.21目录下有一个数据文件,名称为heart_scale,是一个libsvm的数据文件,可使用libsvmread将其转换为matlab格式,可使用如下文件测试:

clc;
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)
在workspace输出如下:

model = 

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)
代表运行成功,就可以在matlab中使用libsvm了!

以下为自定义数据测试:

% 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%,因为这里把训练数据作为了测试数据。