Matlab + LibSVM + 问题集锦【20170407】
由于实验环境需求,实验代码调用了LibSVM工具包,所以今天配置了一下环境,听师兄说有点麻烦,还要用C++编译器进行编译什么的。于是在网上找了一些教程,基于前辈们的分享,本人进一步进行完善(编译的时候遇到一点问题,但是找到了对应的解决办法)。
1、参考网址:
== libsvm库下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
== 视频:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html (有小问题,等下会提到)
== Rachel-Zhang:http://blog.****.net/abcjennifer/article/details/7370177
== 编译问题:http://blog.****.net/buaasuozi/article/details/50781615 (下文具体介绍)
2、具体配置流程:
1)下载libsvm库并解压,得到相关的文件夹,此处版本为【libsvm-3.22】
2)打开Matlab(本文的版本为2016a)--> set path --> add with subfolders --> 复制libsvm-3.22的路径(E:\libsvm-3.22)
3)在Matlab中编译:
编译之前,确保你的电脑装了C++编译器,本文已经安装了VS2010。如果matlab版本太低,如matlab 7.0是不能用VS作为编译器的,只能用VC++ 6.0,此处建议给matlab升级吧!本文使用的是Maltab2016a和VS2010。
== 方法1:【mex -setup】编译,步骤如下:
A、在MATLAB命令窗【Commond Window】中输入命令:
- mex -setup
B、此时可能会提示你输入更完整的命令:
- mex -setup C++
C、按照教程输入相关的命令后,Matlab仍然给出警告(表示未编译成功),如下所示:
解决办法参考下文的“方法2”。
==方法2:【使用LibSVM提供的make文件】进行编译,步骤如下:
1)下载libSVM并添加到matlab的路径中(E:\libsvm-3.22)
2)打开matlab并将目录切换至libsvm根目录下的matlab,如:E:\libsvm-3.22\matlab
3)输入make命令进行编译,如下所示表示编译成功,生成相应的文件(如果make的时候出现问题,请参考下文的【问题集锦】):
4)拷贝上个步骤编译生成的文件到libsvm-3.22\windows文件夹下,替换掉之前的文件。
5)测试libsvm,步骤如下:
A、下载测试数据集:【heart_scale.mat】,点击这里下载【LibSVM工具包+matlab版本测试数据集】
== C++版本的测试数据集:在Matlab平台上跑会出错。
== Matlab版本的测试数据集:本文选择此数据集进行测试。
B、执行命令:
- load heart_scale.mat
- model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
- [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);
3、问题集锦:
1)【mex -setup】编译问题:
解决办法,参考网址:http://blog.****.net/buaasuozi/article/details/50781615
2)【make】编译问题:
Error: C:\Program Files\MATLAB\R2016a\toolbox\libsvm-3.22\matlab\make.m failed (line 13)
Access denied; check that you have permissions to access 'C:\Program Files\MATLAB\R2016a\toolbox\libsvm-3.22\matlab'.
=> Please check README for detailed instructions.