今天需要用到libsvm,然后就开始了网上找教程之旅。。。一折腾一下午又快过去了-_-#
主要参考链接:http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2532201.html
http://blog.csdn.net/abcjennifer/article/details/7370177
http://www.yueye.org/2013/problems-of-libsvm-used-in-matlab.html
下载libsvm:
在网站http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载libsvm最新版本3.12,解压到相应目录(此处解压即安装)。我将其解压后放在c盘,即C:\Program Files\MATLAB\libsvm-3.12。
设置matlab搜索工作目录:
打开matlab,file->Set Path->Add with Subfolders,然后定位到C:\Program Files\libsvm-3.12,注意这里最好定位到libsvm-3.12,而不要定位到libsvm-3.12子目录matlab(也不知道是否可以,没有试过)。点击Save后单击Close即可。
设置matlab当前目工作录:
将matlab的Current Folder定位到刚刚libsvm-3.12下的matlab目录,如我的:C:\Program Files\libsvm-3.12\matlab
必须在libsvm下的matlab目录进行编译操作
选择c/c++编译器:
在matlab的终端输入:mex –setup,当出现Would you like mex to locate installed compilers [y]/n?提示时输入y。然后提示让你选择c/c++编译器,我这里输入数字2,即vs c++2010。当出现Are these correct [y]/n?提示时,输入y即可。当出现如下提示说明编译器选择成功:
当然上面成功的是因为我的编译器安装在系统默认的路径下,如果网友的vs不是安装在系统默认下则需要选择n,然后自己手动更改安装目录,大家去尝试下肯定会成功的。
在终端输入make:
然后查看C:\Program Files\libsvm-3.12\matlab目录下是否生成了libsvmread.mexw32,libsvmwrite.mexw32,svmtrain.mexw32,svmpredict.mexw32这4个文件,如果用,说明libsvm的matlab已经编译成功了。
测试libsvm的matlab工具箱是否可用:
在命令行输入下面命令:
load heart_scale;
model=svmtrain(heart_scale_label,heart_scale_inst)
[predict_lebel,accuracy]=svmpredict(heart_scale_label,heart_scale_inst,model)
则其model显示为:
结果显示为:
这说明libsvm在matlab中可以使用了。
%问题:
由于自己下的是libsvm-3.20版本,heart_scale.mat文件官方已经不提供了,所以执行第一句命令会报错
Number of columns on line 2 of ASCII file D:\Program
Files\MATLAB\libsvm-3.20\heart_scale
must be the same as previous lines.
解决方法:
利用libsvmread函数加载
[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
但又提示can't open input file heart_scale
此时有两种方法:1.将libsvm提供的heart_scale数据集复制到当前工作目录
2.将当前目录设置到libsvm-3.20目录