环境:Matlab R2016a & MacOX 10.12 & Xcode8 LIbsvm 3.22
本篇文章主要记录了如何在以上环境下编译使用libsvm,毕竟要在Mac上使用这个库,有些工作还是需要做的。
- 首先是需要给Mac上安装的Matlab打个补丁optsPatch10.8.patch,默认下载到Download文件
- 打开Matlab,命令行输入>>cd(matlabroot) 切换到Matlab根目录
- 命令行接着输入>>!unzip -o ~/Downloads/optsPatch10.8.patch,将Download文件夹下的补丁解压缩到这个目录中
- 通常在这里可以在命令行输入>>mex -setup进行Matlab编译环境的设置了,但是很不幸,在以上这个环境下,会遇到:
Error using mex
No supported compiler or SDK was found. For options, visit http://www.mathworks.com/support/compilers/R2016a/maci64.html.
这个问题。编译所需要的SDK没有找到,因为我的电脑中已经装有Xcode8(注意,Xcode8里要装有Command line tool),也就是说我电脑中是具有编译的环境的,只是Matlab没有找到,所以接下来就是如何在Matlab里添加我们已有MacOX SDK的路径了 - 进入/Applications/MATLAB_R2015b.app/bin/maci64/mexopts 文件夹,编辑clang++_maci64.xml和clang_maci64.xml,在这两个文件中,找到含有MacOSX10.10.sdk or MacOSX10.11.sdk字样的行,对应的两个标签分别是 dirExists 和 cmdReturns,分别在这两个文件中下面复制对应的一样的行,将其中的MacOX 10.10 或 MacOX 10.11改为MacOX 10.12(打开应用程序,Xcode显示包内容,进入Contents/Developer/Platforms/MacOXplatform/Developer/SDKs 文件夹确认自己的SDK版本,我的是10.12),保存退出。这里是mathwork的官方论坛原帖解决方案。
- 在Matlab命令行中输入>>mex -setup设置好编译环境,到这里编译环境的设置就完成了。
- 下载libsvm并解压到Matlab中的toolbox文件夹中
- 在Matlab中切换当前工作目录到toolbox文件夹中的Matlab文件夹,在命令行输入>>make,之后文件夹中就会出现4个.mexmaci64后缀的文件,到这里导入libsvm库的工作就算完成了。
- 测试:
- 切换当前工作目录回libsvm下面,在Matlab命令行中输入>>[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');载入测试数据
- 命令行输入>>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); - 出现分类的精度Accuracy = 86.6667% (234/270) (classification),就说明大功告成了~Enjoy yourself~