matlab安装libsvm包完整流程
欢迎使用libsvm
下载libsvm
首先是要到张志忠、林志仁的官网下载最新版本的libsvm-3.23, 发布于 July 15, 2018.。官网https://www.csie.ntu.edu.tw/~cjlin/libsvm/
下载完,解压到matlab安装路径下的 toolbox下——D:\MATLAB\R2018A\toolbox\下,并设置路径,参考https://blog.csdn.net/weixin_39970417/article/details/80567715
和https://www.cnblogs.com/Ran-Chen/p/9462825.html
当然这个英文看得有点难受,我为大家准备了修改好的压缩包,包括libsvm包,官方指南和编译器,也就是说下了这个后面只要下载编译器,把libsvm包解压到tools设置下路径,执行make.m就可以用了。
链接:https://download.csdn.net/download/weixin_43332451/11149212
下载编译器
libsvm用C写的,没有编译器根本读不了。这里下的是matlab官网的编译器,其他编译器也行。
https://ww2.mathworks.cn/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compiler
据说TDM-GCC编译器也行
https://blog.csdn.net/qq_31781741/article/details/82666861
进入libsvm目录
E:\MATLAB22\toolbox\libsvm-3.23\matlab(一定要进入matlab!!)
反正你点开“make.m”然后在命令行进行操作就行
修改make.m文件
make.m文本中的CFLAGS 替换成COMPFLAGS,原因是matlab自带的用的不在是C语言(CFLAGS),而是C++(COMPFLAGS),但是C++编译器也可以读C。
参考来自:https://github.com/cjlin1/libsvm/issues/55
没改就会报错:error: -fexceptions: No such file or directory
修改函数名
matlab有自带的svm函数,设置重名就会出现问题。
.为了避免命名冲突svmpredict和svmtrain文件都要改名为,libsvmpredict和libsvmtrain
``当然make里面的文件名也要一起改。
还是弄个全文替换比较好
参见:https://blog.csdn.net/qq_42183184/article/details/86598104
激活编译器
在命令窗口的输入mex -setup,选择 mex -setup C++
执行 make.m文件
注意在E:\MATLAB22\toolbox\libsvm-3.23\matlab 进行,否则找不到呀,或者你直接执行make.m文件好了
编译好一次,以后应该不用再编译了
测试libsvm的matlab工具箱是否可用
load heart_scale;
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);`
修改自https://www.cnblogs.com/datavis/p/6035217.html
结果返回出现这段话,就成功了
问题是3.2.3版本不一定提供了mat文件,只有一个米有后缀名的heart_scale文件,而且像下面这样打开是不行的。
[heart_scale_label, heart_scale_inst] = libsvmread(‘heart_scale’);
括号里要写明heart_scale所在的路径![heart_scale_label,heart_scale_inst]=libsvmread(‘E:\MATLAB\R2018a\toolbox\libsvm-3.23\heart_scale’);
`参考来自:https://blog.csdn.net/weixin_43358444/article/details/84109915
[heart_scale_label,heart_scale_inst]=libsvmread('E:\MATLAB\R2018a\toolbox\libsvm-3.23\heart_scale');
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);`