1. 程式人生 > >libsvm之(一)安裝與測試(matlab)

libsvm之(一)安裝與測試(matlab)

作為一個晚起步的小夥子,得以站在大牛們的肩膀上快速入門。為了以防自己忘記,同時讓其他人系統性的libsvm入門更加快速,這就開啟一個系列了。 
(這裡會參考一篇幫助很大的blog:http://blog.csdn.net/abcjennifer/article/details/7370177,不單單是SVM,很多機器學習以及影象處理方面的問題我都從這裡學到很多。)

Libsvm是什麼? 
LIBSVM臺灣大學林智仁(Lin Chih-Jen)教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與迴歸的軟體包,他不但提供了編譯好的可在Windows系列系統的執行檔案,還提供了原始碼,方便改進、修改以及在其它作業系統上應用;該軟體對SVM所涉及的引數調節相對比較少,提供了很多的預設引數,利用這些預設引數可以解決很多問題;並提供了互動檢驗(Cross Validation)的功能。該軟體可以解決C-SVM、ν-SVM、ε-SVR和ν-SVR等問題,包括基於一對一演算法的多類模式識別問題。

Step 1. 下載 
libsvm庫下載http://www.csie.ntu.edu.tw/~cjlin/libsvm/
注意: 
1、找到網站中“Download LIBSVM”這個小標題的位置,進行libsvm工具的下載,下載下來的將是zip file或者ar.gz格式。 
2、下載解壓後,我們會看到兩個最核心的函式“svm-train”(用來建立模型)以及“svm-predict”(用來預測)。

Step 2. 配置 
a. 設定路徑 
首先需要將Matlab的工作路徑調整到libsvm工具箱所在的資料夾。(否則將會出現 ??? undefined function or variable…) 
b. 配置編譯器 


這一個操作是為了將libsvm工具包中的原來C++寫的程式碼編譯後為Matlab使用。(這裡首先本機需要有預裝的C++編譯器,比如實現安裝好Visual Studio。)下面要做的是在控制視窗輸入: 

>>mex -setup

然後我們會看到:

Welcome to mex -setup.  This utility will help you set up  
a default compiler.  For a list of supported compilers, see  
http://www.mathworks.com/support/compilers/R2013a/win64.html 

Please choose your compiler for building MEX-files: 

Would you like mex to locate installed compilers [y]/n?

這裡我們選擇是,輸入“y”,會讓我們選擇編譯器:

Select a compiler: 
[1] Microsoft Visual C++ 2010 in C:\Program Files (x86)\Microsoft Visual Studio 10.0 

[0] None 

Compiler: 

對於我的電腦,選擇“1”並確認,會得到一大段文字,當我們在裡面找到“Done … ”這樣的關鍵字以後,說明我們的編譯器選擇成功了。 

c. 編譯檔案 
由於需要在Matlab下使用libsvm工具包,因此要先將當前路徑調整到待編譯的檔案集中的“libsvm-3.20\matlab”的路徑下。 
然後我們輸入: 

>> make 
可以看到資料夾中生成了一些以“.mexw32”為字尾的檔案,這就是編譯完成後可供我們呼叫的函式,但是由於編碼的問題我們無法以文件的形式直觀地檢視裡面的程式碼。

Step 3. 測試 
a. 載入資料 
供測試用的資料在工具包主資料夾中就有,名字是”heart_scale“,包含兩個檔案(一個是270*13的樣本,一個是270*1的標籤)。 
注意: 
libsvm庫中下載的是C++資料,所以如果我們直接使用“load heart_scale”是會報錯的。 
所以我們需要使用的是”libsvmread()“這個函式進行讀取。使用方法如下: 

[label_vector, instance_matrix] = libsvmread('filename'); 
所以我們輸入: 
[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale'); 
將在Workspace中得到上述的兩個檔案。 
b. 訓練 
這裡我們將用到”svmtrain“的模型訓練函式,使用方法如下: 
model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options'); 
由於只是測試我們不要求很好的引數,因此可以按如下引數進行輸入: 
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

到此為止證明我們的libsvm已經安裝成功了。 

c. 預測 
作為錦上添花的一步,我們用剛剛訓練好的model來對資料進行一個預測。我們把訓練用的樣本同樣作為我們的測試樣本,輸入如下: 

>> [predict_label] = svmpredict(heart_scale_label,heart_scale_inst,model);
將得到包含準確率的資訊: 
Accuracy = 86.6667% (234/270) (classification)