"本篇是我借鉴了很多教程经验总结出来的,希望对大家有帮助。"
在使用Matlab工具包Libsvm时,需要对相关文件进行编译。
在Matlab中使用mex -setup时提示 未找到支持的编译器或SDK,Matlab推荐使用mingw64,那就安装吧。
编译器我下的是TDM-GCC 地址:http://tdm-gcc.tdragon.net/download
下载TDM-GCC(注意看清是32位还是64位),TDM-GCC的安装路径不要包括空格;然后新建环境变量MW_MINGW64_LOC,设置为TDM-GCC-64的安装位置; 默认安装在C:\TDM-GCC-64,然后进计算机>属性>高级属性>系统变量,新建系统变量 MW_MINGW64_LOC,变量值为C:\TDM-GCC-64。重启matlab,,输入mex -setup就能显示出来MinGW64编译器了。根据提示选择需要的编译器.
进入matlab文件夹,执行make语句。出现gcc: error: \-fexceptions: No such file or directory错误。
修改make.m文件,将CXXFLAGS换成COMPFLAGS
此时输入MAKE就会出现第5步的错误,然后按照楼主的改一下MAKE.M文件重新输入就可以了
这时候就像以前安装libsvm一样,会自动make出来很多文件,不用管,主要是会看到make出带有mexm64后缀名的文件,这就成功了。
5、拷贝4步骤中matlab文件夹下所有make出来的文件,到libsvm-3.1\windows文件夹下,替换替换替换……,统统替换。
编译完成后,在当前目录下回出现svmtrain.mexw64、svmpredict.mexw64(64位系统)或者svmtrain.mexw32、svmpredict.mexw32(32位系统)这两个文件,把文件名svmtrain和svmpredict相应改成libsvmtrain和libsvmpredict。
这是因为Matlab中自带有SVM的工具箱,而且其函数名字就是svmtrain和svmpredict,和LIBSVM默认的名字一样,在实际使用的时候有时会产生一定的问题,比如想调用LIBSVM的变成了调用Matlab SVM。
添加路径
为了以后使用的方便,建议把LIBSVM的编译好的文件所在路径(如C:\libsvm-3.17\matlab)添加到Matlab的搜索路径中。具体操作为:(中文版Matlab对应进行)
HOME -> Set Path -> Add Folder -> 加入编译好的文件所在的路径(如C:\libsvm-3.17\matlab)
当然也可以把那4个编译好的文件复制到想要的地方,然后再把该路径添加到Matlab的搜索路径中。
验证是否成功:使用数据libsvm试验数据下载可以将下载后的heart_scale.mat数据复制到刚才的目录下(其实无所谓)。然后输入libsvm工具箱特有的语句,就可以验证成功与否了:
>> 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);
输出:
*
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270) (classification)
得到了分类精度,这就证明libsvm安装成功!