libsvm簡介

在條件都一樣的情況下,LIBSVM是臺灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與迴歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;該軟件還有一個特點,就是對SVM所涉及的參數調節相對比較少,提供了很多的默認參數,利用這些默認參數就可以解決很多問題;並且提供了交互檢驗(Cross Validation)的功能。該軟件包可以在http://www.csie.ntu.edu.tw/~cjlin/免費獲得。該軟件可以解決C-SVM分類、?-SVM分類、?-SVM迴歸和?-SVM迴歸等問題,包括基於一對一算法的多類模式識別問題。在第2章中我們也介紹了該軟件的一些優點,因此通過綜合考慮,我們決定採用該軟件作爲工作軟件。SVM用於模式識別或迴歸時,SVM方法及其參數、核函數及其參數的選擇,目前國際上還沒有形成一個統一的模式,也就是說最優SVM算法參數選擇還只能是憑藉經驗、實驗對比、大範圍的搜尋或者利用軟件包提供的交互檢驗功能進行尋優。LIBSVM使用方法LibSVM是以源代碼和可執行文件兩種方式給出的。如果是Windows系列操作系統,可以直接使用軟件包提供的程序,也可以進行修改編譯;如果是Unix類系統,必須自己編譯,軟件包中提供了編譯格式文件,我們在SGI工作站(操作系統IRIX6.5)上,使用免費編譯器GNU C++3.3編譯通過。
LIBSVM 使用的一般步驟是:
1) 按照LIBSVM軟件包所要求的格式準備數據集;
2) 對數據進行簡單的縮放操作;
3) 考慮選用RBF 核函數;
4) 採用交叉驗證選擇最佳參數C與g ;
5) 採用最佳參數C與g 對整個訓練集進行訓練獲取支持向量機模型;
6) 利用獲取的模型進行測試與預測。
LIBSVM使用的數據格式
該軟件使用的訓練數據和檢驗數據文件格式如下:
<label> <index1>:<value1> <index2>:<value2> ...
其中<label> 是訓練數據集的目標值,對於分類,它是標識某類的整數(支持多個類);對於迴歸,是任意實數。<index> 是以1開始的整數,可以是不連續的;<value>爲實數,也就是我們常說的自變量。檢驗數據文件中的label只用於計算準確度或誤差,如果它是未知的,只需用一個數填寫這一欄,也可以空着不填。在程序包中,還包括有一個訓練數據實例:heart_scale,方便參考數據文件格式以及練習使用軟件。可以編寫小程序,將自己常用的數據格式轉換成這種格式
Svmtrain和Svmpredict的用法
LIBSVM軟件提供的各種功能都是DOS命令執行方式。我們主要用到兩個程序,svmtrain(訓練建模)和svmpredict(使用已有的模型進行預測),下面分別對這兩個程序的使用方法、各參數的意義以及設置方法
做一個簡單介紹:
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):核函數中的?函數設置(默認1/ k)
-r coef0:核函數中的coef0設置(默認0)
-c cost:設置C-SVC,? -SVR和?-SVR的參數(默認1)
-n nu:設置?-SVC,一類SVM和?- SVR的參數(默認0.5)
-p e:設置? -SVR 中損失函數?的值(默認0.1)
-m cachesize:設置cache內存大小,以MB爲單位(默認40)
-e ?:設置允許的終止判據(默認0.001)
-h shrinking:是否使用啓發式,0或1(默認1)
-wi weight:設置第幾類的參數C爲weight?C(C-SVC中的C)(默認1)
-v n: n-fold交互檢驗模式
其中-g選項中的k是指輸入數據中的屬性數。option -v 隨機地將數據剖分爲n部分並計算交互檢驗準確度和均方根誤差。以上這些參數設置可以按照SVM的類型和核函數所支持的參數進行任意組合,如果設置的參數在函數或SVM類型中沒有也不會產生影響,程序不會接受該參數;如果應有的參數設置不正確,參數將採用默認值。training_set_file是要進行訓練的數據集;model_file是訓練結束後產生的模型文件,文件中包括支持向量樣本數、支持向量樣本以及lagrange係數等必須的參數;該參數如果不設置將採用默認的文件名,也可以設置成自己慣用的文件名。
Svmpredict的用法:svmpredict test_file model_file output_filemodel_file是由svmtrain產生的模型文件;test_file是要進行預測的數據文件;Output_file是svmpredict的輸出文件。svm-predict沒有其它的選項。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 = ,
       支持向量的個數
 使用實例:

1)svmtrain train3.scale train3.model

訓練train3.scale,將模型保存於文件train3.model,並在dos窗口中輸出如下

結果:

optimization finished, #iter = 1756

nu = 0.464223

obj = -551.002342, rho = -0.337784

nSV = 604, nBSV = 557

Total nSV = 604

其中,#iter爲迭代次數,nu 與前面的操作參數-n n 相同,obj爲SVM文件

轉換爲的二次規劃求解得到的最小值,rho 爲判決函數的常數項b,nSV 爲支持

向量個數,nBSV爲邊界上的支持向量個數,Total nSV爲支持向量總個數。

訓練後的模型保存爲文件train3.model,用記事本等文本瀏覽器打開可以看到其內容如下(其後“%”後內容爲筆者所加註釋):

svm_type c_svc % 訓練所採用的svm類型,此處爲C- SVC

kernel_type rbf % 訓練採用的核函數類型,此處爲RBF核

gamma 0.047619 % 與操作參數設置中的g 含義相同

nr_class 2 % 分類時的類別數,此處爲兩分類問題

total_sv 604 % 總共的支持向量個數

rho -0.337784 % 決策函數中的常數項b

label 0 1 % 類別標籤

nr_sv 314 290 % 各類別標籤對應的支持向量個數

SV % 以下爲支持向量

1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1

1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1

... ... ...

1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1

% 對於分類問題,上面的支持向量的各列含義與訓練數據集相同;對於迴歸問題,略有不同,與訓練數據中的標籤label(即y值)所對應的位置在模型文件的支持向量中現在存放的是Lagrange 係數a 值,即爲下面決策函數公式中的a 值:

四. svmpredict 的用法

svmpredict 是根據訓練獲得的模型,對數據集合進行預測。

用法:svmpredict [options] test_file model_file output_file

options(操作參數):

-b probability_estimates:是否需要進行概率估計預測,可選值爲0 或者1,

默認值爲0。

model_file 是由svmtrain 產生的模型文件;test_file 是要進行預測的數據文

件;output_file 是svmpredict 的輸出文件,表示預測的結果值。svmpredict 沒有

其它的選項。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章