1. 程式人生 > >使用libsvm分類和預測詳細說明(python)

使用libsvm分類和預測詳細說明(python)

Libsvm使用詳細介紹

optimization finished, #iter= 162    //iter為迭代次數,

nu = 0.431029                   //nu是你選擇的核函式型別的引數

obj = -100.877288, rho =0.424462   // rho為判決函式的偏置項b

// objSVM檔案轉換為的二次規劃求解得到的最小值

nSV = 132, nBSV = 107            // nSV為標準支援向量個數(0<a[i]<c)

//nBSV為邊界上的支援向量個數(a[i]=c)

Total nSV = 132

//TotalnSV為支援向量總個數(對於兩類來說,因為只有一個分類模型TotalnSV = nSV

,但是對於多類,這個是各個分類模型的nSV之和)。

用法:

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為上限值;

     -ssave_filename:表示將縮放的規則儲存為檔案save_filename

     -rrestore_filename:表示將按照已經存在的規則檔案restore_filename進行縮放;

     filename:待縮放的資料檔案,檔案格式按照libsvm格式。

首先開啟cmd,進入libsvm>windows資料夾

預設情況下,只需要輸入要縮放的檔名就可以了:比如(已經存在的檔案為test.txt)

                         svm-scaletest.txt

這時,test.txt中的資料已經變成[-1,1]之間的資料了。但是,這樣原來的資料就被覆蓋了,為了讓規劃好的資料另存為其他的檔案,我們用一個dos的重定向符 > 來另存為(

假設為out.txt)

                       svm-scale test.txt > out.txt

執行後,我們就可以看到目錄下多了一個out.txt檔案,那就是規範後的資料。假如,我們想設定資料範圍[0,1],並把規則儲存為test.range檔案:

                        svm-scale –l 0 –u 1 –s test.range test.txt > out.txt

這時,目錄下又多了一個test.range檔案,可以用記事本開啟,下次就可以用

-r test.range來載入了。

grid.py   //暴力試參

首先進入libsvm>tools資料夾,找到grid.py,開啟原始碼修改gnuplot_exe(需要另下載)的路徑

開啟cmd,進入libsvm>tools資料夾

輸入python grid.py test.txt

可選引數[-log2cbegin,end,step] [-log2g begin,end,step] [-v fold]

//使用者自定義的引數 cg 的範圍 begin~end 以及步長 step,幾折交叉驗證

得到引數cg的值以及交叉驗證準確率

注意:text.txt裡面的資料,每一行的的鍵必須從小到大依次排列,否則報錯,libsvm其他方法處理的時候,則不需要

使用時調入模組

(1)svm_read_problem() : read the data from a LIBSVM-format file

(2)svm_problem():

(3)svm_parameter():引數為字串

其中的c和g引數根據之前除錯的引數進行修改

svm_train的引數:

-s SVM的型別(svm_type)

0 -- C-SVC(預設)使用懲罰因子(Cost)的處理噪聲的多分類器

1 -- nu-SVC(多分類器)按照錯誤樣本比例處理噪聲的多分類器

2 -- one-class SVM一類支援向量機,可參見"SVDD"的相關內容

3 -- epsilon-SVR(迴歸)epsilon支援向量迴歸

4 -- nu-SVR(迴歸)

-t核函式型別(kernel_type)

0 -- linear(線性核):u'*v

1 -- polynomial(多項式核):(gamma*u'*v +coef0)^degree

2 -- radial basisfunction(RBF,徑向基核/高斯核):exp(-gamma*|u-v|^2)

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

4 -- precomputed kernel(預計算核)

核矩陣儲存在training_set_file

下面是調整SVM或核函式中引數的選項:

-d調整核函式的degree引數,預設為3

-g調整核函式的gamma引數,預設為1/num_features

-r調整核函式的coef0引數,預設為0

-c調整C-SVC, epsilon-SVR nu-SVR中的Cost引數,預設為1

-n調整nu-SVC, one-class SVM nu-SVR中的錯誤率nu引數,預設為0.5

-p調整epsilon-SVRloss function中的epsilon引數,預設0.1

-m調整內緩衝區大小,MB為單位,預設100

-e調整終止判據,預設0.001

-wi調整C-SVC中第i個特徵的Cost引數

調整演算法功能的選項:

-b是否估算正確概率,取值0 - 1,預設為0

-h是否使用收縮啟發式演算法(shrinkingheuristics),取值0- 1,預設為0

-v交叉校驗

     -q靜默模式

4svm_train()

svm_train3個過載:

model = svm_train(y, x [,'training_options'])

model = svm_train(prob [,'training_options'])

model = svm_train(prob, param)

5svm_save_model()  : save model to a file.

將訓練好的svm_model儲存到檔案中:

svm_save_model('model_file',model)

model_file的內容:

svm_typec_svckernel_typelinearnr_class 2 total_sv 2 rho 0 label 1 -1probA 0.693147 probB 2.3919e-16 nr_sv 1 1 SV 0.25 1:1 2:1-0.25 1:-1 2:-1

6svm_load_model()  : load a LIBSVM model.

讀取儲存在檔案中的svm_model:

model =svm_load_model('model_file')

7svm_predict()

呼叫語法:

p_labs, p_acc, p_vals =svm_predict(y, x, model [,'predicting_options'])

引數:

y測試資料的標籤x測試資料的輸入向量model為訓練好的SVM模型。

返回值:

p_labs是儲存預測標籤的列表。

p_acc儲存了預測的精確度,均值和迴歸的平方相關係數。

p_vals在指定引數'-b 1'時將返回判定係數(判定的可靠程度)

這個函式不僅是測試用的介面,也是應用狀態下進行分類的介面。比較奇葩的是需要輸入測試標籤y才能進行預測,因為y不影響預測結果可以用0向量代替。