Matlab安裝使用libsvm

一.下載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.mexw32svmpredict.mexw32libsvmread.mexw32libsvmwrite.mexw32等文件(對於 Matlab 7.1如下上版本,生成的對應文件爲svmtrain.dllsvmpredict.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這個結構體(其中保存了全部的支持向量及其係數),那麼說明 libsvmmatlab 之間的接口已經徹底配置成功。

 

注意:

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\matlabREADME文件纔是幫助文件。

可是輸入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

相關文章
相關標籤/搜索