一.下載libsvmhtml
http://www.csie.ntu.edu.tw/~cjlin/libsvm/web
在libsvm的網站上下載 libsvm-3.12.zip文件,解壓後放在任意目錄下,最好放在MATLAB工具箱中,好比 C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12下。windows
二.配置編譯器函數
打開 matlab,切換到C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12\matlab目錄下,鍵入如下命令:工具
mex –setup測試
出現提示語句網站
Please choose your compiler for building MEX-files:ui
Would you like mex to locate installed compilers [y]/n?n %此次是選擇編譯器,輸入n,選擇自定義的編譯器this
出現如下選項(因電腦而異)加密
Select a compiler:
[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[2] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 Shell linker)
[4] Lcc-win32 C 2.4.1
[5] Microsoft Visual C++ 6.0
[6] Microsoft Visual C++ 2005 SP1
[7] Microsoft Visual C++ 2008 SP1
[8] Microsoft Visual C++ 2010
[9] Microsoft Visual C++ 2010 Express
[10] Open WATCOM C++
[0] None
Compiler: 8%能夠用其餘的,出現如下提示語句
Your machine has a Microsoft Visual C++ 2010 compiler located at
C:\Program Files\Microsoft Visual Studio 10.0. Do you want to use this compiler [y]/n?
編譯器默認路徑,確認正確輸入y,更改路徑,輸入n
輸入y出現再次確認
Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: C:\Program Files\Microsoft Visual Studio 10.0
Are these correct [y]/n? y
編譯器配置完成
Trying to update options file: C:\Documents and Settings\zhangduokun\Application Data\MathWorks\MATLAB\R2011a\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2011a\bin\win32\mexopts\msvc100opts.bat
Done . . .
三.編譯
輸入命令
>> make
>>
%編譯完成
系統就會生成svmtrain.mexw32,svmpredict.mexw32,libsvmread.mexw32和libsvmwrite.mexw32等文件(對於 Matlab 7.1如下上版本,生成的對應文件爲svmtrain.dll,svmpredict.dll和 read_sparse.dll,沒作測試),而後能夠在matlab的菜單 File->Set Path->add with subfolders(可直接用Add Folder)裏,把C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12\matlab目錄添加進去,這樣之後在任何目錄下均可以調用 libsvm的函數了。
四.測試
爲了檢驗 libsvm和 matlab之間的接口是否已經配置完成,能夠在 matlab下執行如下命令:
>>load heart_scale
完成該步驟後發現Workspace中出現了heart_scale_inst和 heart_scale_label,說明正確
>>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)% done
若是運行正常並生成了model這個結構體(其中保存了全部的支持向量及其係數),那麼說明 libsvm和matlab 之間的接口已經徹底配置成功。
注意:
1. matlab自帶了C編譯器Lcc-win32C,可是libsvm原始版本是C++實現的,所以須要C++的編譯器來編譯,這就是不適用matlab默認編譯器而選擇其餘C++編譯器的緣由。
matlab支持的編譯器也是有限的,能夠查看不一樣版本matlab支持的編譯器列表
2. 若是matlab版本過低,如matlab 7.0是不能用VS做爲編譯器的,只能用VC++ 6.0
3. .mexw32 文件是通過加密的,打開是亂碼,函數自己沒有幫助。
例如輸入 help svmpredict會出現報錯: svmpredict not found
工具箱libsvm-3.12\matlab中README文件纔是幫助文件。
可是輸入help svmtrain會出現幫助信息,其實出現的是系統自帶的svmtrain函數,沒有libsvm工具箱中的好用。
4.在新版本libsvm3.12中,文件夾libsvm-3.12\windows中已經有編譯好的程序,能夠直接使用,只須要把libsvm-3.12\windows添加到matlab路徑中便可,不須要編譯的過程。固然最好仍是本身編譯一遍,由於編譯環境不一樣會致使一些不可預估的小問題,本身編譯的過程是可控的。
5. 測試用數據集,libsvm官網上提供了不少數據集
測試使用的heart_scale數據集是C++版本的(類標籤 1:第一個屬性 2:第二個屬性…),能夠用libsvmread來轉換爲matlab版本的(它們的區別在類標籤)。
[label_vector, instance_matrix] = libsvmread(‘C++版本數據集’); %獲得類標籤和屬性矩陣,而後可使用它們訓練了model = svmtrain(label_vector, instance_matrix);
>> load heart_scale
>> model = svmtrain(heart_scale_label,heart_scale_inst);
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
>> [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
Accuracy = 86.6667% (234/270) (classification)
6.參考資料
libsvm庫下載:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
視頻:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html(有小問題,等下會提到)
詳解:http://www.matlabsky.com/thread-11925-1-1.html