天天看點

LIBSVM

LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易于使用和快速有效的SVM模式識别與回歸的軟體包,他不但提供了編譯好的可在Windows系列系統的執行檔案,還提供了源代碼,友善改進、修改以及在其它作業系統上應用;該軟體還有一個特點,就是對SVM所涉及的參數調節相對比較少,提供了很多的預設參數,利用這些預設參數就可以解決很多問題;并且提供了互動檢驗(Cross Validation)的功能。該軟體包可以在http://www.csie.ntu.edu.tw/~cjlin/免費獲得。該軟體可以解決C-SVM分類、-SVM分類、-SVM回歸和-SVM回歸等問題,包括基于一對一算法的多類模式識别問題。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的用法

  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(使用已有的模型進行預測)的用法:svmpredict test_file model_file output_file

  model_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 = ,

  支援向量的個數

繼續閱讀