概述補充
SVM用於模式識別或回歸時,SVM方法及其參數、核函式及其參數的選擇,目前國際上還沒有形成一個統一的模式,也就是說最優SVM算法參數選擇還只能是憑藉經驗、實驗對比、大範圍的搜尋或者利用軟體包提供的互動檢驗功能進行尋優。
目前,LIBSVM擁有C、Java、Matlab、C#、Ruby、Python、R、Perl、Common LISP、Labview等數十種語言版本。最常使用的是C、Matlab、Java和命令行(c語言編譯的工具)的版本。
以上各版本在林智仁(Lin Chih-Jen)主頁上均有連結。
使用手冊
LibSVM是以原始碼和執行檔兩種方式給出的。如果是Windows系列作業系統,可以直接使用軟體包提供的程式,也可以進行修改編譯;如果是Unix類系統,必須自己編譯,軟體包中提供了編譯格式檔案,我們在SGI工作站(作業系統IRⅨ6.5)上,使用免費編譯器GNU C++3.3編譯通過。
使用步驟
LIBSVM 使用的一般步驟是:
1) 按照LIBSVM軟體包所要求的格式準備數據集;
2) 對數據進行簡單的縮放操作;
3) 考慮選用RBF 核函式;
4) 採用交叉驗證選擇最佳參數C與g ;
5) 採用最佳參數C與g 對整個訓練集進行訓練獲取支持向量機模型;
6) 利用獲取的模型進行測試與預測。
數據格式
LIBSVM使用的數據格式
該軟體使用的訓練數據和檢驗數據檔案格式如下:
: : ...
其中 是訓練數據集的目標值,對於分類,它是標識某類的整數(支持多個類);對於回歸,是任意實數。 是以1開始的整數,可以是不連續的;;為實數,也就是我們常說的自變數。檢驗數據檔案中的label只用於計算準確度或誤差,如果它是未知的,只需用一個數填寫這一欄,也可以空著不填。在程式包中,還包括有一個訓練數據實例:heart_scale,方便參考數據檔案格式以及練習使用軟體。
可以編寫小程式,將自己常用的數據格式轉換成這種格式。其中formatdatalibsvm.xls檔案可以方便的將excel數據轉化為符合LIBSVM要求的數據格式。
Svmtrain使用方法
Svmtrain(訓練建模)的用法:svmtrain [options] training_set_file [model_file]
Options:可用的選項即表示的涵義如下
-s svm類型:SVM設定類型(默認0)
0 -- C-SVC
1 --v-SVC
2 – 一類SVM
3 -- e -SVR
4 -- v-SVR
-t 核函式類型:核函式設定類型(默認2)
0 – 線性:u'v
1 – 多項式:(r*u'v + coef0)^degree
2 – RBF函式:exp(-r|u-v|^2)
3 –sigmoid:tanh(r*u'v + coef0)
-d degree:核函式中的degree設定(針對多項式核函式)(默認3)
-g r(gama):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(默認1/ k)
-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)((默認0)
-c cost:設定C-SVC,e -SVR和v-SVR的參數(損失函式)(默認1)
-n nu:設定v-SVC,一類SVM和v- SVR的參數(默認0.5)
-p p:設定e -SVR 中損失函式p的值(默認0.1)
-m cachesize:設定cache記憶體大小,以MB為單位(默認40)
-e eps:設定允許的終止判據(默認0.001)
-h shrinking:是否使用啟發式,0或1(默認1)
-wi weight:設定第幾類的參數C為weight*C (C-SVC中的C) (默認1)
-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2
其中-g選項中的k是指輸入數據中的屬性數。option -v 隨機地將數據剖分為n部分並計算互動檢驗準確度和均方根誤差。以上這些參數設定可以按照SVM的類型和核函式所支持的參數進行任意組合,如果設定的參數在函式或SVM類型中沒有也不會產生影響,程式不會接受該參數;如果應有的參數設定不正確,參數將採用默認值。
training_set_file是要進行訓練的數據集;model_file是訓練結束後產生的模型檔案,檔案中包括支持向量樣本數、支持向量樣本以及lagrange係數等必須的參數;該參數如果不設定將採用默認的檔案名稱,也可以設定成自己慣用的檔案名稱。
Svmpredict使用方法
[predict_label, accuracy, decision_values/prob_estimates] = svmpredict(test_label, test_matrix, model, ['libsvm_options']);
-test_label:
測試標籤
-testmatrix:
測試數據
-model:
訓練的模型
用法如下:
modle=svmtrain(test_label,testmatrix,'libsvm_options');
[PredictLabel,accurac1] = svmpredict(test_label,testmatrix,model);
Svmpredict(使用已有的模型進行預測)的用法:svmpredict test_file model_file output_file
model_file是由svmtrain產生的模型檔案;
test_file是要進行預測的數據檔案;
Output_file是svmpredict的輸出檔案。
svm-predict沒有其它的選項。
SVMSCALE 的用法
對數據集進行縮放的目的在於:1)避免一些特徵值範圍過大而另一些特徵值範圍過小;
2)避免在訓練時為了計算核函式而計算內積的時候引起數值計算的困難。因此,通常將數據縮放到[ -1,1]或者是[0,1]之間。
用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper]
[-s save_filename] [-r restore_filename] filename
(預設值:lower = -1,upper = 1,沒有對y進行縮放)
其中,
-l:數據下限標記;lower:縮放後數據下限;
-u:數據上限標記;upper:縮放後數據上限;
-y:是否對目標值同時進行縮放;y_lower為下限值,y_upper為上限值;
-s save_filename:表示將縮放的規則保存為檔案save_filename;
-r restore_filename:表示將縮放規則檔案restore_filename載入後按此縮放;
filename:待縮放的數據檔案(要求滿足前面所述的格式)。
縮放規則檔案可以用文本瀏覽器打開,看到其格式為:
lower upper
lval1 uval1
lval2 uval2
其中的lower 與upper 與使用時所設定的lower 與upper 含義相同;index 表
示特徵序號;lval 為該特徵對應轉換後下限lower 的特徵值;uval 為對應於轉換後上限upper 的特徵值。
數據集的縮放結果在此情況下通過DOS視窗輸出,當然也可以通過DOS的
檔案重定向符號“>;”將結果另外儲存為指定的檔案。
使用實例:
1) svmscale –s train3.rangetrain3>train3.scale
表示採用預設值(即對屬性值縮放到[ -1,1]的範圍,對目標值不進行縮放)
對數據集train3 進行縮放操作,其結果縮放規則檔案保存為train3.range,縮放集的縮放結果保存為train3.scale。
2) svmscale –r train3.rangetest3>test3.scale
表示載入縮放規則train3.range 後按照其上下限對應的特徵值和上下限值線
性的地對數據集test3 進行縮放,結果保存為test3.scale。
舉例說明
svmtrain -s 0 -c 1000 -t 1 -g 1 -r 1 -d 3 data_file
訓練一個由多項式核(u'v+1)^3和C=1000組成的分類器。
svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file
在RBF核函式exp(-0.5|u-v|^2)和終止允許限0.00001的條件下,訓練一個?-SVM (? = 0.1)分類器。
svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file
以線性核函式u'v和C=10及損失函式?= 0.1求解SVM回歸。
輸出如下:
optimization finished,#iter
疊代次數
epsilon =
二次規劃的終止條件
obj =,
obj,就是那個二次規劃的最小值吧
rho =
判決函式的常數向
nSV =,
支持向量的個數
重要論文
本部分列出幾篇關於LIBSVM的重要論文。
libsvm:a library for Support Vector Machines
A practical guide to SVM classification
Training and Testing Low-degree Polynomial Data Mappings via Linear SVM
Working Set Selection Using Second Order Information for Training Support Vector Machines