Matlab 2016a安装libsvm【Win10自测可用】

SVM最好的工具是libsvm,由于该工具由C编写,所以在matlab调用中需进行编译。本人查阅了一下午的博客,并以此来参考进行安装,感觉大多数博客介绍不够系统清楚,最后综合了好几篇才成功安装,记录以供参考。

1、libsvm下载

下载地址 https://www.csie.ntu.edu.tw/~cjlin/libsvm/
Matlab 2016a安装libsvm【Win10自测可用】
很多博客里面说需下载一些测试数据集,这个先不着急,libsvm里面自带了一个。
数据集地址为:
https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/

2、解压并添加路径

  1. 解压
    将libsvm.zip文件夹解压到安装Matlab的toolbox文件夹下,我的路径为:“D:\Matlab 2016a\install\toolbox”;
    Matlab 2016a安装libsvm【Win10自测可用】
  2. matlab中添加路径
    主页-设置路径-选择“libsvm”在toolbox中的路径,保存。
    Matlab 2016a安装libsvm【Win10自测可用】

3、编译

  1. mex -setup
    如果没有安装C++的开发环境,在matlab的命令行输入上述命令,会出现“错误使用mex的提示,并要求安装MinGW-w64 C/C++编译器”;如果之前已有VS2010或VS2013等,可依据依据选择编译器。
    (1)安装MinGW-w64 C/C++编译器
    可以用matlab提供的链接打开,但是我这边无法下载MinGW-w64 C/C++;推荐使用下面的方式,但是matlab提供了相应的说明,有一点比较重要,值得注意
    参考博客【http://blog.sina.com.cn/s/blog_167bbdec10102x113.html】 以及在已有MinGW文件的时候如何为Matlab配置【https://ww2.mathworks.cn/matlabcentral/answers/313298-i-already-have-mingw-on-my-computer-how-do-i-configure-it-to-work-with-matlab】
    Matlab 2016a安装libsvm【Win10自测可用】
    默认路径安装,会放在C盘(系统盘)根目录下;
    (2)配置环境变量
    步骤跟java配置环境变量基本相同。
    右击电脑——属性——高级系统设置——高级选项卡——【环境变量】
    在系统变量一栏下选择【新建】,变量名为“MW_MINGW64_LOC”,变量值为“C:\ TDM-GCC-64”
    Matlab 2016a安装libsvm【Win10自测可用】
    (3)matlab中配置为临时变量
    在matlab命令窗口中输入以下命令,将MW_MINGW64设置为临时环境变量
setenv('MW_MINGW64_LOC','C:\TDM-GCC-64')

(4)选择编译器
在matlab命令窗口中输入以下命令,

mex -setup

Matlab 2016a安装libsvm【Win10自测可用】
输入

mex -setup C++
  1. 编译
    将matlab中的文件路径调整到“D:\Matlab 2016a\install\toolbox\libsvm-3.23\matlab”
    在命令窗口,输入make命令,该文件路径下有个make.m文件。
    Matlab 2016a安装libsvm【Win10自测可用】
    会出现没有该文件或路径的提示。
    根据博客【https://blog.****.net/qq_15767429/article/details/79641758】、https://blog.****.net/chensheng312/article/details/73195158#comments】https://blog.****.net/qq_41670192/article/details/80241296】 中的修改方法,将make.m文件中的CFLAGS全部替换为COMPFLAGS,修改完后保存。
    Matlab 2016a安装libsvm【Win10自测可用】
    然后,再在命令窗口输入make,会出现编译成功的提示。
    Matlab 2016a安装libsvm【Win10自测可用】

4、调用测试

  1. 修改函数名

svmtrain与matlab中自带的svm工具的函数名相同,为避免后续使用麻烦,建议将后缀名为mexw64的svmtrain文件更改为libsvmtrain.mexw64,为保持统一,我都改为了lib开头的函数。不需要修改.c文件
Matlab 2016a安装libsvm【Win10自测可用】

  1. 分类测试
    将libsvm文件夹下的“heart_scale”文件复制到\libsvm-3.23\matlab\路径下,输入以下命令
[heart_scale_label,heart_scale_inst] =libsvmread('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);

Matlab 2016a安装libsvm【Win10自测可用】