Mac OS環境下的libsvm在Matlab中安裝
為了讓大家少走彎路,一定要分享一下我的經驗教訓……
好啦~我們開始吧!
所需要的材料:Macbook、Xcode、Matlab2014R、libsvm-3.21、optsPatch10.8.patch、xcode7_mexopts
libsvm的原始版本使用C++寫的,為了在matlab平臺下使用,需要用C++編譯器編譯,生成類似於.m檔案的.mexmaci64檔案。這就是為什麼我們要用到Xcode的原因了
Step1:首先在你的電腦上裝上Xcode
Step2:觀察下你的Xcode有沒有Command Line Tool,最新版本的應該都是預設安裝了的,沒有的請自行百度安裝啦。就是這個:
Step3:下載並安裝補丁optsPatch10.8.patch
預設下載到Downloads資料夾下,不要動!
在Matlab中輸入:
cd(matlabroot)
!unzip -o ~/Downloads/optsPatch10.8.patch
- 1
- 2
Step4:在Matlab中配置mex
在Matlab中建立一個編譯C++的環境
輸入:
mex -setup
- 1
如果成功了就好了,如果不成功,請這樣做:
Step4.1:xcode7_mexopts.zip,然後解壓
Step4.2:在Matlab下,輸入:
cd ( prefdir );
//看一下當前資料夾下有沒有"mex_"打頭的檔案,如"mex_C_maci64.xml",如果有的話,移除該檔案
cd( fullfile( matlabroot, 'bin', 'maci64', 'mexopts' ) );
mkdir mexoptsContentsOLD
movefile *.xml mexoptsContentsOLD/
movefile( '~/Downloads/xcode7_mexopts/*.xml', '.' );
mex -setup
- 1
- 2
- 3
- 4
- 5
- 6
- 7
這樣應該就成功了。
Step5:接下來安裝libsvm
先從libsvm官網上下載最新的libsvm,然後放到Matlab的toolbox資料夾下(Application->Matlab->顯示包內容->找到toolbox->把libsvm放進去)
Step6:進入libsvm的matlab資料夾
在Matlab中輸入:
cd(matlabroot)
cd toolbox/libsvm-3.21/matlab
- 1
- 2
Step7:執行make
在Matlab中輸入
make
- 1
該步驟就是將C++檔案編譯成matlab下可以執行的檔案
看看資料夾下是不是有.mexmaci64檔案生成啦
Step8:把libsvm加入到Matlab的工作路徑下
這一步不能漏啊,否則出了libsvm-3.21這個資料夾就不能使用這些函數了呀,所以要把這些函式加入工作路徑下,工作路徑就是Matlab每次看到函式時都會去找其實現的地方呀。
在HOME標籤頁上點選Set Path;左側點Add With Subfolders,把libsvm中matlab資料夾加進去,儲存就好了。
到此為止,改裝的都裝好了。
我們來測試一下!
轉到libsvm-3.21資料夾下,會看到一個heart_scale檔案,我們用這個檔案來測試
在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);
- 1
- 2
- 3
如果結果出現:
Accuracy = 86.6667% (234/270) (classification)
則成功啦!
參考資料:
http://www.jianshu.com/p/e0275a380803
http://apinetree.blog.51cto.com/714152/1560254/
http://cn.mathworks.com/matlabcentral/answers/246507-why-can-t-mex-find-a-supported-compiler-in-matlab-r2015b-after-i-upgraded-to-xcode-7-0