Matlab 导入libsvm
由于科研需求,需要用到libsvm库内特有的SVDE分类器,因此琢磨了一下如何在matlab中使用libsvm,先将版本说明如下:
操作步骤
1) https://github.com/cjlin1/libsvm或者官网下载http://www.csie.ntu.edu.tw/~cjlin/libsvm/
2)解压缩安装到任意目录下即可,建议到matlab的安装目录下的toolbox中,我的是C:\Program Files\MATLAB\R2014a\toolbox。
3)将libsvm的安装目录添加到matlab的路径下,即:
保存关闭即可。其实将libsvm_master下面的windows目录添加进来好像就够了,但是为了防止出错,我还是把整目录都加进来了。
4)对于64windows操作系统,无需额外的编译操作,因为libsvm_master的windows下包含了matlab可执行的二进制文件libsvmread.mexw64/libsvmwrite.mexw64/svmpredict.mexw64/svmtrain.mexw64。但是我在运行的过程中出错,后来参考了第一篇博客的方法,也就是和32位操作系统下的执行步骤一样。见下面5)
5)对于32位操作系统和matlab,需要自己编译生成二进制文件**.mexw64。
首先在matlab运行窗口输入mex -setup,我的没有多种编译器选择,直接出现的是这个,反之已经有配置的VC 2010编译器了。
接着,将运行目录切换到C:\Program Files\MATLAB\R2014a\toolbox\libsvm_master\matlab,该目录下有一个make.m,即用于编译生成二进制文件的
成功:在该目录下生成了4个mexw64文件,将它们复制到libsvm_master的windows目录下即可。
6)测试数据:将运行目录切换到C:\Program Files\MATLAB\R2014a\toolbox\libsvm_master,该目录下有个测试数据heart_scale.mat,使用以下命令测试:
[heart_scale_label,heart_scale_inst]=libsvmread(‘heart_scale’);
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); % test the trainingdata
如果出现一行:Accuracy = 86.6667% (234/270) (classification)。就说明成功了。就可以在matlab中使用svm了。
出现的问题及解决方法
即使在看似这么简单的过程中我也遭遇了重重困难啊,苍天啊!将自己遇到的问题和解决方法和大家分享一下。
1. 版本问题:注意matlab的位数版本要和操作系统保持一致,visual studio的版本要低于matlab的版本,具体的版本对应可以看https://cn.mathworks.com/content/dam/mathworks/mathworks-dot-com/support/sysreq/files/SystemRequirements-Release2014a_SupportedCompilers.pdf
2. 无法识别安装的visual studio编译器的问题:
1)问题:输入mex-setup提示无法找到支持的编译器,此时已经下载了visual studio2010了。
2)方法:参考第二篇博客的方法, 更改了C:\Program Files\MATLAB\R2014a\bin\win64\mexopts\compilerComponents目录下的msvc90shellopts.stp文件。修改内容:将第七行 my default location后面的9.0改成了当前2010的版本,此外分别将27行和52行的9.0改成了10.0。保存重启matlab即可。
3. win64下不能直接使用libsvm,于是按照32位下的方法,自己勤恳地编译产生二进制文件,步骤在上面已经详细写好了。
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。 本博客转载请注明地址和参考博客哦 欢迎留言咨询,不定时上线,毕竟第一篇博客(●’◡’●)
|
请发表评论