数据挖掘-全面的MAC上matlab安装libsvm

时间:2022-10-09 06:44:25

主要整理于:

1,简书mac安装libsvm

2,matlab社区关于mex -setup失败 (下面的过程会翻译)

3,百度知道关于如何确定安装成功


步骤:

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');
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)

测试通过!