LIBSVM使用方法及參數設置


轉自:http://blog.sina.com.cn/s/blog_6a41348f0101ep7w.html轉自:

 

主要參考了一些博客以及自己使用經驗。收集來覺得比較有用的。

 

LIBSVM

 

數據格式需要----------------------

 

 

         決策屬性  條件屬性a  條件屬性b  ...

         2    1:7   2:5    ...

         1    1:4   2:2    ...

        

 

數據格式轉換----------------------

當數據較少時,可以用formatdatalibsvm輕松地將文本數據轉換成為svm工具使用的數據。

使用方法為:

1,打開FormatDataLibsvm.xls然后將數據粘貼到sheet1的topleft單元。

    輸入格式為:

         條件屬性a  條件屬性b  ...  決策屬性

         7    5   ...  2

         4    2   ...  1

 

輸出數據格式是

 

         決策屬性  條件屬性a  條件屬性b  ...

         2    1:7   2:5    ...

         1    1:4   2:2    ...

        

  

2,再"工具"-->"宏"-->執行下面有一個選項(FormatDatatoLibsvm)-->執行,要選中這個然后運行就可以了 ,這時數據轉換的問題就解決了(如果沒有宏選項,點擊“開始--excel選項---在功能區顯示“開發工具”選項卡”)

3,可以copy到一個記事本中即可。但是注意在用libsvm的時候要在命令行輸入.txt后綴。

 

svm參數說明----------------------

如果你要輸出類的概率,一定要有-b參數

svm-train training_set_file model_file

svm-predict test_file model_fileoutput_file

自動腳本:python easy.py train_data test_data

自動選擇最優參數,自動進行歸一化。

對訓練集合和測試結合,使用同一個歸一化參數。

-c:參數

-g: 參數

-v:交叉驗證數

-s svm_type : set type of SVM (default 0)

        0 -- C-SVC

        1 -- nu-SVC

        2 -- one-class SVM

        3 -- epsilon-SVR

        4 -- nu-SVR

-t kernel_type : set type of kernelfunction (default 2)

        0 -- linear: u'*v

        1 -- polynomial: (gamma*u'*v + coef0)^degree

        2 -- radial basis function: exp(-gamma*|u-v|^2)

        3 -- sigmoid: tanh(gamma*u'*v + coef0)

-d degree : set degree in kernel function(default 3)

 

-g gamma : set gamma in kernel function(default 1/num_features)

-r coef0 : set coef0 in kernel function(default 0)

-c cost : set the parameter C of C-SVC,epsilon-SVR, and nu-SVR (default 1)

-n nu : set the parameter nu of nu-SVC,one-class SVM, and nu-SVR (default 0.5)

-p epsilon : set the epsilon in lossfunction of epsilon-SVR (default 0.1)

-m cachesize : set cache memory size in MB(default 100)

-e epsilon : set tolerance of terminationcriterion (default 0.001)

-h shrinking: whether to use the shrinkingheuristics, 0 or 1 (default 1)

-b probability_estimates: whether to traina SVC or SVR model for probability estimates, 0 or 1 (default 0)(如果需要估計分到每個類的概率,則需要設置這個)

-wi weight: set the parameter C of class ito weight*C, for C-SVC (default 1)

 Thek in the -g option means the number of attributes in the input data.

 

 

libsvm使用誤區----------------------

(1)      直接將訓練集合和測試集合簡單歸一化到[0,1]區間,可能導致實驗結果很差。

(2)      如果樣本的特征數非常多,那么就不必使用RBF核將樣本映射到高維空間。

a)        在特征數非常多的情況下,使用線性核,結果已經非常好,並且只需要選擇參數C即可。

b)        雖然說RBF核的結果至少比線性核好,前提下搜索整個的空間。

(3)      樣本數<<特征數的情況:

a)        推薦使用線性核,可以達到與RBF同樣的性能。

(4)      樣本數和特征數都非常多:推薦使用liblinear,更少的時間和內存,可比的准確率。

(5)      樣本數>>特征數:如果想使用線性模型,可以使用liblinear,並且使用-s 2參數

 

libsvm在訓練model的時候,有如下參數要設置,當然有默認的參數,但是在具體應用方面效果會大大折扣。 

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(-gamma|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部

 

當構建完成model后,還要為上述參數選擇合適的值,方法主要有Gridsearch,其他的感覺不常用,Gridsearch說白了就是窮舉。

 

網格參數尋優函數(分類問題):SVMcgForClass

[bestCVaccuracy,bestc,bestg]=

SVMcgForClass(train_label,train,

cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

輸入:

train_label:訓練集的標簽,格式要求與svmtrain相同。

train:訓練集,格式要求與svmtrain相同。

cmin,cmax:懲罰參數c的變化范圍,即在[2^cmin,2^cmax]范圍內尋找最佳的參數c,默認值為cmin=-8,cmax=8,即默認懲罰參數c的范圍是[2^(-8),2^8]。

gmin,gmax:RBF核參數g的變化范圍,即在[2^gmin,2^gmax]范圍內尋找最佳的RBF核參數g,默認值為gmin=-8,gmax=8,即默認RBF核參數g的范圍是[2^(-8),2^8]。

v:進行Cross Validation過程中的參數,即對訓練集進行v-fold Cross Validation,默認為3,即默認進行3折CV過程。

cstep,gstep:進行參數尋優是c和g的步進大小,即c的取值為2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值為2^gmin,2^(gmin+gstep),…,2^gmax,默認取值為cstep=1,gstep=1。

accstep:最后參數選擇結果圖中准確率離散化顯示的步進間隔大小([0,100]之間的一個數),默認為4.5。

輸出:

bestCVaccuracy:最終CV意義下的最佳分類准確率。

bestc:最佳的參數c。

bestg:最佳的參數g。

 

網格參數尋優函數(回歸問題):SVMcgForRegress

[bestCVmse,bestc,bestg]=

SVMcgForRegress(train_label,train,

cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)

其輸入輸出與SVMcgForClass類似,這里不再贅述。

 

而當你訓練完了model,在用它做classification或regression之前,應該知道model中的內容,以及其含義。

 

用來訓練的是libsvm自帶的heart數據

 

model =

   Parameters: [5x1 double]

     nr_class: 2

      totalSV: 259                   % 支持向量的數目

          rho: 0.0514               %  b

        Label: [2x1 double]     %  classification中標簽的個數

        ProbA: []

        ProbB: []

          nSV: [2x1 double]     %  每類支持向量的個數

       sv_coef: [259x1 double]  %   支持向量對應的Wi

 

          SVs: [259x13 double]  %   裝的是259個支持向量

 

model.Parameters參數意義從上到下依次為:

-s svm類型:SVM設置類型(默認0)

-t 核函數類型:核函數設置類型(默認2)

-d degree:核函數中的degree設置(針對多項式核函數)(默認3)

-g r(gama):核函數中的gamma函數設置(針對多項式/rbf/sigmoid核函數) (默認類別數目的倒數)

-r coef0:核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)

 

SVM 怎樣能得到好的結果

1.   對數據做歸一化(simple scaling)

2.   應用 RBF kernel 

3.   用cross-validation和grid-search 得到最優的c和g

4.   用得到的最優c和g訓練訓練數據

5.   測試

 

 

關於svmC以及核函數參數設置----------------------

參考自:對支持向量機幾種常用核函數和參數選擇的比較研究

  

C一般可以選擇為:10^t , t=- 4..4就是0.0001 到10000

 選擇的越大,表示對錯誤例懲罰程度越大,可能會導致模型過擬合

 

在LIBSVM中-t用來指定核函數類型(默認值是2)。

0)線性核函數

(無其他參數)

1)多項式核函數

(重點是階數的選擇,即d,一般選擇1-11:1 3 5 7 9 11,也可以選擇2,4,6…)

2)RBF核函數

(徑向基RBF內核,exp{-|xi-xj|^2/均方差},其中均方差反映了數據波動的大小。

參數通常可選擇下面幾個數的倒數:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默認的是類別數的倒數,即1/k,2分類的話就是0.5)

3)sigmoid核函數 又叫做S形內核

兩個參數g以及r:g一般可選1 2 3 4,r選0.2 0.4 0.60.8 1

4)自定義核函數

 

常用的四種核函數對應的公式如下:

 

與核函數相對應的libsvm參數:

1)對於線性核函數,沒有專門需要設置的參數

2)對於多項式核函數,有三個參數。-d用來設置多項式核函數的最高此項次數,也就是公式中的d,默認值是3。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。

3)對於RBF核函數,有一個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。

4)對於sigmoid核函數,有兩個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM