介绍
LIBSVM是台湾大学林智仁(Chih-Jen Lin)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,目前最新版本是3.23。博文中在MATLAB平台配合实例学习掌握LIBSVM,希望可以对SVM感兴趣的朋友有一定的帮助。
安装
提示:如果是win64位,LIBSVM 中libsvm-3.23\windows文件夹自带了编译好的文件:
libsvmread.mexw64
libsvmwrite.mexw64
svmtrain.mexw64
svmpredict.mexw64
这样就不要编译就可以在MATLAB中使用LIBSVM。
但是还是有必要介绍一下编译过程。
编译环境:win64,matlab2018a。
步骤1:下载
将下载的LIBSVM解压,拷贝至toolbox,最终路径如下
D:\Program Files (x86)\Matlab2018a\toolbox\libsvm-3.23
当然也可以放在其他路径,最好统一在toolbox文件夹内。
步骤2:设置路径
![](https://i-blog.csdnimg.cn/blog_migrate/f329f23e3a525f4f3a387a0608fb914c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4a31cae0e6466852da1d7a313f1a702.png)
步骤3:配置编译器
在命令窗口的输入mex -setup,输出为:
>> mex -setup
MEX 配置为使用 'Microsoft Visual C++ 2013 (C)' 以进行 C 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。您需要
更新代码以利用新的 API。
您可以在以下网址找到更多的相关信息:
https://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
mex -setup FORTRAN
步骤4:选择mex -setup C++,输出为
MEX 配置为使用 'Microsoft Visual C++ 2013' 以进行 C++ 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。您需要
更新代码以利用新的 API。
您可以在以下网址找到更多的相关信息:
https://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
步骤5:编译
编译前需要设置当前路径为:
D:\Program Files (x86)\Matlab2018a\toolbox\libsvm-3.23\matlab
![](https://i-blog.csdnimg.cn/blog_migrate/c5c518f3c4838138672b9524f205605c.png)
设置路径。
输入命令:make,或者打开make.m文件执行编译。
3秒内编译好,在matlab文件中生成
libsvmread.mexw64
libsvmwrite.mexw64
svmtrain.mexw64
svmpredict.mexw64
四个文件,安装完成。
测试
libsvm 软件包中自带有测试数据,即软件包根目录下的 heart_scale 文件。但是该文件使用libsvmread函数无法读取, 报错如下:
can’t open input file heart_scale
解决方法有两个,
解决方法1:
下载heart_scale.mat数据,然后在MATLAB打开。或者使用重新制作的该文件下载。
解决方法2:
用MATLAB自带函数load加载数据即可。
load heart_scale;
数据即可读入工作区
![](https://i-blog.csdnimg.cn/blog_migrate/5c0d0b26f69cd1122ee3462a764672a5.png)
测试代码如下:
clc;
clear;
load heart_scale;
model = svmtrain(heart_scale_label,heart_scale_inst)
[predict_label,accuracy,dec_values] = svmpredict(heart_scale_label,heart_scale_inst,model)
输出结果
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
model =
包含以下字段的 struct:
Parameters: [5×1 double]
nr_class: 2
totalSV: 132
rho: 0.4245
Label: [2×1 double]
sv_indices: [132×1 double]
ProbA: []
ProbB: []
nSV: [2×1 double]
sv_coef: [132×1 double]
SVs: [132×13 double]
Accuracy = 86.6667% (234/270) (classification)
安装成功
接下来的博文将会对LIBSVM的数据制作、分类和回归问题进行讲解。