主要整理于:
2,matlab社区关于mex -setup失败 (下面的过程会翻译)
步骤:
1,下载下面两个文件:
Matlab optsPatch10.8.patch ,libsvm的库。
2,安装command line tools:打开终端,输入
xcode-select --install
然后点击安装,等待下载安装即可。
3,Matlab打补丁:给matlab安装optsPatch10.8.patch。在Matlab命令框中输入:
cd(matlabroot) !unzip -o ~/Downloads/optsPatch10.8.patch
第二行解压缩,文件路径自己改,一般下载下来没有动的话就是在Downloads里面。
4,mex -setup:告诉Matlab可以用混合模式编译了。在Matlab命令框中输入:
mex -setup
5,如果mex -setup报错:如果报错Error using mex这类,进行第5步中操作:
5.1:下载文件xcode7_mexopts.zip,解压。
5.2:打开MATLAB,在命令窗口输入
cd( prefdir )
5.3:看到MATLAB界面下“Current Folder”窗口,确保里面没有"mex_" 开头的XML文件(如 mex_C_maci64.xml),如果有,删。
5.4:命令窗口输入
cd( fullfile( matlabroot, 'bin', 'maci64', 'mexopts' ) );
5.5:备份原先这里的文件。
mkdir mexoptsContentsOLD
movefile *.xml mexoptsContentsOLD/
5.6:将解压后的xcode7_mexopts文件夹下的文件移动到当前文件夹下:
movefile( '~/Downloads/xcode7_mexopts/*.xml', '.' );
5.7:重启MATLAB,然后mex -setup,这里mex -setup应该终于OK了,可能会有warning,没事。
6,看到第一步下载的libsvm库的压缩包,解压,然后移动到一个平时不会用到的地方,这个可是工具包哦~例如/Users/melody/Documents下。
7,make:打开libsvm库里面的MATLAB文件夹,找到make.m文件,在MATLAB里面打开,运行,成功之后会发现在原文件夹多了四个.m文件。
8,引入工具包:Matlab中HOME标签页点Set Path,出来个框,左侧点Add With Subfolders,把上一步的libsvm库文件夹中MATLAB文件夹加进去,点Save,Close。大功告成。
--------验证是否安装成功---------
我崇拜的Rachel-Zhang的说法是:
libsvmread('heart_scale');
model = svmtrain(heart_scale_label,heart_scale_inst);
[predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
然后得到Accuracy = 86.6667% (234/270) (classification)
关于读取数据网上也有人说 load heart_scale
问题:
1,现在的官方不给heart_scale.mat文件了,所以不能直接load;
2,libsvmread()的用法现在为[label_vector, instance_matrix] = libsvmread('filename');例如:[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale');
3,由于heart_scale在libsvm目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] = libsvmread('../heart_scale');../代表返回上层路径。
正确的测试方法:
首先进入heart_scale文件目录,就是libsvm的目录;
然后下面的代码:
[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale');出现Accuracy = 86.6667% (234/270) (classification)
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);
测试通过!