LibSVM學習(三)——LibSVM使用規範

   其實,這部分寫也是多餘,google一下「libsvm使用」,就會N多的資源,可是,爲了讓你少費點心,在這裏就簡單的介紹一下,有不清楚的只有動動你的mouse了。須要說明的是,2.89版本之前,都是svmscale、svmtrain和svmpredict,最新的是svm-scale、svm-train和svm-predict,要是用不習慣,只須要把那四個exe文件名去掉中間的短橫線,改爲svmscale、svmtrain和svmpredict就能夠了,咱們仍是按原來函數名的講。web

 

1. libSVM的數據格式編程

Label 1:value 2:value ….函數

 

Label:是類別的標識,好比上節train.model中提到的1 -1,你能夠本身隨意定,好比-10015。固然,若是是迴歸,這是目標值,就要實事求是了。學習

Value:就是要訓練的數據,從分類的角度來講就是特徵值,數據之間用空格隔開google

 

好比: -15 1:0.708 2:1056 3:-0.3333spa

 

須要注意的是,若是特徵值爲0,特徵冒號前面的(姑且稱作序號)能夠不連續。如:rest

       -15 1:0.708 3:-0.3333orm

代表第2個特徵值爲0,從編程的角度來講,這樣作能夠減小內存的使用,並提升作矩陣內積時的運算速度。咱們平時在matlab中產生的數據都是沒有序號的常規矩陣,因此爲了方便最好編一個程序進行轉化。接口

 

 

 

2. svmscale的用法內存

 

    svmscale是用來對原始樣本進行縮放的,範圍能夠本身定,通常是[0,1][-1,1]。縮放的目的主要是

1)防止某個特徵過大或太小,從而在訓練中起的做用不平衡;

2)爲了計算速度。由於在覈計算中,會用到內積運算或exp運算,不平衡的數據可能形成計算困難。

 

用法:svmscale [-l lower] [-u upper]

                         [-y y_lower y_upper]

                         [-s save_filename]

                         [-r restore_filename] filename

 

 

其中,[]中都是可選項:

         -l:設定數據下限;lower:設定的數據下限值,缺省爲-1

         -u:設定數據上限;upper:設定的數據上限值,缺省爲 1

         -y:是否對目標值同時進行縮放;y_lower爲下限值,y_upper爲上限值;

         -s save_filename:表示將縮放的規則保存爲文件save_filename

         -r restore_filename:表示將按照已經存在的規則文件restore_filename進行縮放;

         filename:待縮放的數據文件,文件格式按照libsvm格式。

 

 

默認狀況下,只須要輸入要縮放的文件名就能夠了:好比(已經存在的文件爲test.txt)

        

                         svmscale test.txt

 

    這時,test.txt中的數據已經變成[-1,1]之間的數據了。可是,這樣原來的數據就被覆蓋了,爲了讓規劃好的數據另存爲其餘的文件,咱們用一個dos的重定向符 > 來另存爲(假設爲out.txt)

        

                        svmscale test.txt > out.txt

 

   運行後,咱們就能夠看到目錄下多了一個out.txt文件,那就是規範後的數據。假如,咱們想設定數據範圍[0,1],並把規則保存爲test.range文件:

                         svmscale –l 0 –u 1 –s test.range test.txt > out.txt

 

這時,目錄下又多了一個test.range文件,能夠用記事本打開,下次就能夠用-r test.range來載入了。

 

 

3. svmtrain的用法

 

      svmtrain咱們在前面已經接觸過,他主要實現對訓練數據集的訓練,並能夠得到SVM模型。

 

        用法: svmtrain [options] training_set_file [model_file]

 

其中,options爲操做參數,可用的選項即表示的涵義以下所示:

-s 設置svm類型:

         0 – C-SVC

         1 – v-SVC

         2 – one-class-SVM

         3 – ε-SVR

         4 – n - SVR

-t 設置核函數類型,默認值爲2

         0 -- 線性核:u'*v

         1 -- 多項式核: (g*u'*vcoef 0)degree

         2 -- RBF 核:exp(-γ*||u-v||2)

         3 -- sigmoid 核:tanh(γ*u'*vcoef 0)

-d degree: 設置多項式核中degree的值,默認爲3

-gγ設置核函數中γ的值,默認爲1/kk爲特徵(或者說是屬性)數;

         -r coef 0:設置核函數中的coef 0,默認值爲0

         -c cost:設置C-SVC、ε-SVRn - SVR中從懲罰係數C,默認值爲1

         -n v :設置v-SVCone-class-SVM n - SVR 中參數,默認值0.5

         -p ε :設置v-SVR的損失函數中的,默認值爲0.1

         -m cachesize:設置cache內存大小,以MB爲單位,默認值爲40

         -e ε :設置終止準則中的可容忍誤差,默認值爲0.001

         -h shrinking:是否使用啓發式,可選值爲1,默認值爲1

         -b 機率估計:是否計算SVCSVR的機率估計,可選值1,默認0

         -wi weight:對各種樣本的懲罰係數C加權,默認值爲1

         -v nn折交叉驗證模式;

         model_file:可選項,爲要保存的結果文件,稱爲模型文件,以便在預測時使用。

    

    默認狀況下,只須要給函數提供一個樣本文件名就能夠了,但爲了能保存結果,仍是要提供一個結果文件名,好比:test.model,則命令爲:

                                         svmtrain test.txt test.model

結果說明見LibSVM學習(二)。

 

4. svmpredict 的用法

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

   用法:svmpredict [options] test_file model_file output_file

 

   其中,options爲操做參數,可用的選項即表示的涵義以下所示:

-b probability_estimates——是否須要進行機率估計預測,可選值爲或者1,默認值爲0

 

model_file ——是由svmtrain 產生的模型文件;

test_file—— 是要進行預測的數據文件,格式也要符合libsvm格式,即便不知道label的值,也要任意填一個,svmpredict會在output_file中給出正確的label結果,若是知道label的值,就會輸出正確率;

output_file ——svmpredict 的輸出文件,表示預測的結果值。

 

   至此,主要的幾個接口已經講完了,知足通常的應用不成問題。對於要作研究的,還須要深刻到svm.cpp文件內部,看看都作了什麼。

相關文章
相關標籤/搜索