Matlab 下 libsvm 的编译与坑
LIBSVM 是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。
不少做机器学习的小伙伴需要把它编译并用在 Matlab 的环境,尤其是在 Windows 系统下,特别多麻烦。
下面我归纳出来的安装方法,适用于 Windows
+ GCC
。
安装 TDM-GCC
LIBSVM
毕竟是一个 C语言 写的库,因此需要使用编译器编译出接口让 Matlab
调用。
Matlab
的 mex
支持多种编译器。在 Windows
上支持 Visual Studio
,但是我已经安装了最新的 Visual Studio
,不想再去折腾旧版的VS。因此我选择使用 GCC
的方案。
在 Windows
下可以使用的 GCC
编译链 有 MinGW64
、CygWin
、TDM-GCC
。
很可惜的是,老是折腾不上 MinGW64
,最终就选择了 Matlab
推荐的 TDM-GCC
。
如果你是正版的 Matlab
(好比说我),直接可以去 Mathworks
官网下载,一键安装:
https://www.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compiler
如果你是盗版的 Matlab
,就需要手动来安装啦。 直接去 TDM-GCC
的官网下载: http://tdm-gcc.tdragon.net/download。
最新版也是可以用于 Matlab
的。下载好了,直接按流程安装就OK了。
此处有个需要注意的地方,如果你需要使用
OpenMP
做并行计算,请记得在安装功能的时候勾上!!!
安装完了还没结束,请到系统的环境变量那里,变量名设置 MW_MINGW64_LOC
,变量值为你的 TDM-GCC
的安装目录,好比说:C:/TDM-GCC-64
。设置完了重开一次 Matlab
就可以使用 mex
编译啦。
测试 mex
在 Matlab
的命令行窗口(Command Window)处输入:mex -setup
看到输出 MEX configured to use 'MinGW64 Compiler (C)
差不多的话,就说明安装成功啦。
编译 LIBSVM
到 LIBSVM 的 Github 页面,在 Release 处下载最新版的源代码压缩包。
下载完成后,建议把压缩包解压到 Matlab
的安装目录下的 toolbox
目录。
然后使用 主页 - 设置路径 里面的 添加文件夹,把刚刚我们解压到 toolbox
的 LIBSVM
文件夹下的 matlab
文件夹加入。
最后加入的搜索路径大概长这个样子:
1 | C:\Matlab\toolbox\libsvm\matlab |
完成这个事情之后,就可以切换 Matlab
的工作目录到上面的目录了。只需要一个命令就可以完成编译:
1 | make |
make
其实运行的是make.m
那个编译脚本
如果你是 Windows
系统,这样是肯定编译不了的,会出现下面的错误。
1 | 使用 'MinGW64 Compiler (C)' 编译。 |
怎么解决呢?网上写的解决方法都是不好的,那个改 COMPFLAGS
的 Issue 并不是最好的,因为丢了 CFLAGS
。
下面是我总结出来的独家的解决方法:
其实问题在于 Windows
下的 $
是没有语义的,因此不需要 \$
做转义。因此!只需要把 make.m
下面的 \$CFLAGS
全部替换为 $CFLAGS
,也就是删掉 \
就可以在保留 CFLAGS
的基础上编译通过了。
下面是可以直接编译成功的 make.m
:
1 | % This make.m is for MATLAB and OCTAVE under Windows, Mac, and Unix |
改完之后再运行一次 make
就可以啦。
测试 LIBSVM
将 LIBSVM 文件夹下的测试数据集 heart_scale
libsvm\matlab
下。
切换工作目录到 libsvm\matlab
目录,在命令窗口(Command Window)运行以下命令。
1 | [heart_scale_label,heart_scale_inst] = libsvmread('heart_scale'); |
看到输出 Accuracy = 86.6667%
类似的文字就说明你的 LIBSVM
成功编译并可以使用啦!
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。