MATLAB中使用libsvm

最近正在学习机器学习算法SVM,然后需要用到libsvm库,于是整理了下自己配置的大致过程。
自己的平台环境:win10 MATLAB 2017b libsvm 3.22

1 . 下载libsvm

并将其拷贝到MATLAB安装目录下的toolbox目录下。例如我的是:C:\Program Files\MATLAB\R2017b\toolbox\
下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/#download

2 . 下载 MinGW-w64 C/C++ 编译器

自己使用的是matlab2017工具平台,然而libsvm是使用C++开发的,这样我们就需要先使用C++的编译工具,将libsvm编译成matlab能直接使用的文件,于是就按照matlab官网的提示安装了MinGW-w64 C/C++ compiler 这个编译器。因为从matlab官网安装的一直会下不下来,自己就独立安装了 tdm64-gcc-4.9.2.exe
安装好后,最好配置一下环境变量,方便matlab查找已安装的编译器。
如:安装目录为:C:\TDM-GCC-64

  • 添加系统环境变量:变量名 MW_MINGW64_LOC 目录为安装目录 C:\TDM-GCC-64
  • 然后在matlab中运行:setenv('MW_MINGW64_LOC','C:\TDM-GCC-64')
    这样编译器的环境就配好了。

3 . MATLAB中验证环境

然后在matlab命令行输入:mex -setup 会提示 MEX配置使用 MinGW-w64 C/C++ compiler 编译器,并伴有一个警告,但不影响。

4 . 接着输入命令:make 会报一个错误,如下

提示用户权限不够,因此,我们可以先将libsvm-3.22文件夹,在别的盘(如D盘)编译好,再复制到C盘下MATLAB的安装目录C:\Program Files\MATLAB\R2017b\toolbox\ 之中。

这里因为开始不知道可以在别的盘直接用 MinGW-w64 C/C++编译好,于是就下了visual studio 2017,然后用Microsoft Visual C++ 2017 编译的,如上。其实可以直接用MinGW-w64 C/C++编译是一样的。编译好你会看到目录下多了4个.mexw64格式的文件:

注意:这里使用用 visual studio 编译时,需要查看官网MATLAB能够使用对应版本的visual studio,或者其他工具.
如:matlab 2017 b —— visual studio 2017, 而matlab 2017 a 却不能使用 visual studio 2017 编译。
因此,建议大家直接下载 tdm64-gcc-4.9.2.exe 单独安装文件,并在别的盘先编译好,然后再拷贝到matlab的安装目录之中。

5 .测试libsvm库

在libsvm-3.22目录下有一个hear_scale 数据文件,我们可以通过使用libsvmread()函数将其转化成matlab格式,然后再进行相应的操作。

1
2
>>[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
>> model = svmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07')
  • optimization finished, #iter = 134
    nu = 0.433785
    obj = -101.855060, rho = 0.426412
    nSV = 130, nBSV = 107
    Total nSV = 130
1
>> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);  % test the trainingdat

Accuracy = 86.6667% (234/270) (classification)

看到这样的结果,就说明你可以在matlab中使用SVM了。

6 .参考博客