SVM參數設置

http://hi.baidu.com/yuanding232323/item/dee80e1a495c0b2bf6625c88python

LIBSVM使用方法及參數設置

主要參考了一些博客以及本身使用經驗。收集來以爲比較有用的。函數

 

LIBSVM工具

 

數據格式須要----------------------性能

 

 

         決策屬性  條件屬性a  條件屬性b  ...開發工具

         2    1:7   2:5    ...測試

         1    1:4   2:2    ...spa

        

 

數據格式轉換----------------------命令行

當數據較少時,能夠用formatdatalibsvm輕鬆地將文本數據轉換成爲svm工具使用的數據。excel

使用方法爲:orm

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。

相關文章
相關標籤/搜索