matlab的libsvm工具箱(faruto版本)配置问题汇总,用于VS2015+R2017a

最近因为需要学习SVM(支持向量机)分类的应用,参考的书是《MATLAB 神经网络30个案例分析》。

版本信息:WIN10系统

编译器:VS2015

MATLAB:R2017a

本来只是觉得很简单的安装LIBSVM工具箱,然后就可以直接跑代码,撒花,完结,如果你这样想就是too。。。naive,一把辛酸泪。。。就简单的说下自己解决一系列问题的过程吧,折腾了一天多。。。

第一步:就是下载libsvm,这里好多教程都有,matlab一些网站也有很多版本,我这直接用的那本书里自己附带的也就是faruto版本的长这样的文件夹,这本书的作者之一在下面这个网址也说得很详细。

http://www.matlabsky.com/thread-10966-1-1.html也可以作为SVM的入门教程

至于

libsvm的配置,步骤如下:安装libsvm-mat是在MATLAB平台下使用libsvm的前提,如果没有安装好也就无法使用,在MATLAB平台下安装libsvm-mat一般有以下几个大步骤:

此处大部分转载自  http://www.matlabsky.com/forum-viewthread-tid-11925-fromuid-18677.html


1. 将libsvm-mat所在文件夹目录添加到MATLAB工作搜索目录 Set Path…——》 Add with Subfolders...)
这第一步很重要,如果没有将libsvm-mat所在文件夹目录正确的添加到MATLAB工作搜索目录,使用的时候就会出Undefined function or variable 'XXX'. 等等报错。一般将libsvm-mat文件夹放在matlab安装生成的Toolbox文件夹下,然后按以上步骤添加进工作搜索目录。
首先明晰一下MATLAB工作搜索目录(路径)和当前目录(路径)这两个概念:

当前目录[Current Folder]是指MATLAB当前所在的路径,MATLAB菜单栏下面有一个Current Folder可以在这里进行当前所在目录的更改。
工作搜索目录(路径)是指当你使用某一个函数的时候,MATLAB可以进行搜索该函数的所有的目录集合。

注:
当你使用某一个函数的时候,MATLAB首先会从当前目录搜索调用该函数,如果当前目录没有该函数,MATLAB就会从工作搜索目录按照从上到下的顺序进行搜索调用该函数,如果工作搜索目录中也没有该函数,就会给出 ??? Undefined function or variable 'XXX' 这个报错。所以呀,往后如果出现这个报错,您不妨看一下您想调用的函数所在目录是否添加到MATLAB工作搜索目录中了。


2. 选择编译器(mex -setup)
好多工具箱其实在上面那步之后就算是“安装”成功了,有的小朋友可能会问:“为啥安装libsvm-mat会选神马编译器,干嘛!?”,因为libsvm的原始版本是用c++写的,这里为了能在MATLAB平台下使用,需要用编译器编译一下,生成一个类似于.m文件的东东(. mexw32文件)这样就可以在MATLAB平台下使用libsvm了,所以这里需要在编译之前选择一个编译器告诉MATLAB:“你就用这个我刚刚选择的编译器给我把 svmtrain.c && svmpredict.c等等一系列放在make.m中的文件名字给我编译一下。”
这第一步也很重要,如果编译器没有选择好的话,下一步进行make编译的时候就会出现如下报错:Unable to complete successfully.这个表示你没有选择好编译器。
下面进行编译器的选择,既然是“选择”,那说明你电脑上需要安装了编译器才行,这就又涉及到一个问题:“神马是编译器?!”,学过C语言的应该会懂得,不懂的百度去,这里我推荐使用Microsoft Visual C++ 6.0编译器或者更高版本的visual studio,一般MATLAB会自带一个编译器Lcc-win32 C 但这个在这里无法使用!为啥呢?因为libsvm源代码使用c++写的,而Lcc-win32 C是一个c编译器,无法编译c++源代码!
下面具体说说如何选择编译器。

首先在MATLAB命令窗【Commond Window】中输入:

  1. mex -setup
Remark : 注意 mex 后面要打一个 空格 然后 是-setup。 千万别忘记打一个空格,发现好多朋友在mex和-setup之间没有打空格!!
这里问你是否locate本机安装的编译器,然后你选择相应的编译器并确认即可:
然后选择
敲黑板敲黑板!!!!此处一定要先选择C++语言,然后再选择编译器种类,也就是下图,然后地阿基标号3的那里选择VS2015

最后结果如下图则没毛病。


这个地方的坑太多。。。待我一一道来,首先MinGW64编译器并不是不能编译C++语言,但是它能力不够,其他的使用PYTHON或别的语言需要结合MATLAB的时候或许有用的,但这里我用于SVM的函数编译的话不能用!!!所以还是用VS比较稳妥。

这部分特别重要,前边说的前提是你的编译器正常使用且能被matlab识别,你才有选择的权利。。。

查了很多资料,有人说不能识别是因为matlab和VS安装的先后顺序不对,必须先安装VS,这个我没验证过,反正调了 不对我就把matlab卸载重装了,哭唧唧。。。然后还是不行,后来把VS修复了一下,说明问题还是出在编译器安装问题上,提示,安装好VS之后一定要新建C++类的项目如MFC,不用做别的就看能不能新建就可以,就好像买的新东西没用过一次,封装的太好,matlab识别不了,修复的步骤百度也有很多,在控制面板点卸载它的时候会有修复的选项,点击即可。还有修复完成后一定要重启电脑!!!这都是血的教训啊。。。如果以上都没问题的话就没问题了,我的问题大概就是这些,总结了就是VS这里一定要使用过,有测试是否可以用C++,有问题修复重启电脑,然后就是设置编译器选择的时候先选择C++语言,然后选择VS2015!!!

PS:matlab支持的编译器列表在这里查看:
http://www.mathworks.com/support/compilers/current_release/
这样就表示编译器选择成功了(此步骤中可能会出现warning警告是正常现象,不用管的说~)。

这样编译器的选择就结束了,相应会遇到的问题大概也就是上面这些了。
================================================================
3. 编译文件(make)
这一步说白了就是运行一下 libsvm-mat工具箱中的make.m文件。
首先需要把MATLAB的当前目录[Current Folder]调整到libsvm-mat所在的文件夹,如果你要问神马是“当前目录”?看第一步中,有关“MATLAB工作搜索目录(路径)和当前目录(路径)这两个概念”的讲解。

当前目录[Current Folder]是指MATLAB当前所在的路径,MATLAB菜单栏下面有一个Current Folder可以在这里进行当前所在目录的更改。
工作搜索目录(路径)是指当你使用某一个函数的时候,MATLAB可以进行搜索该函数的所有的目录集合。
有人会问:“如何把MATLAB的当前目录[Current Folder]调整到libsvm-mat所在的文件夹?”
答曰:先上个图:

你点击箭头所指的那三个点,就能选择libsvm-mat所在的目录了,事先将libsvm-mat工具箱放在一个你想要放的位置即可~
然后在MATLAB命令窗【Commond Window】输入
  1. make

如果成功运行没有报错,到此就说明libsvm-mat工具箱成功安装了。编译成功后会生成相应的mexw文件,比如32位电脑生成mexw32  文件,64位电脑生成  mexw64 文件,这就说明matlab成功编译了C++语言,没问题了。

Libsvm-mat工具箱中有自带的heart_scale.mat测试数据集,可以运行以下代码来check一下是否安装成功:

  1. load heart_scale;
  2. model = svmtrain(heart_scale_label,heart_scale_inst);
  3. [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
如果出现下面这个结果,则说明肯定安装成功了:
  1. Accuracy = 86.6667% (234/270) (classification)
注:编译文件(make)这一步为神马要把MATLAB的当前目录[Current Folder]调整到libsvm-mat所在的文件夹呢?
答曰:因为这一步要运行libsvm-mat工具箱中的make.m文件,因为当你使用某一个函数的时候,MATLAB首先会从当前目录搜索调用该函数,为了防止其他位置也有类似名字的make.m函数,所以这一步要把MATLAB的当前目录[Current Folder]调整到libsvm-mat所在的文件夹,优先运行libsvm-mat文件夹下的make.m文件。



猜你喜欢

转载自blog.csdn.net/weixin_42296976/article/details/80997098