1. 程式人生 > >libsvm中svmtrain的引數和返回值

libsvm中svmtrain的引數和返回值

svmtrain函式的輸入引數和返回值進行說明

1. 訓練

libsvm函式用於對訓練集的資料進行訓練,得到訓練好的模型。

model = libsvmtrain(training_label_vector, training_instance_matrix ['libsvm_options']);

這個函式有三個引數,其中

-training_label_vector:訓練樣本的類標,如果有m個樣本,就是m x 1的矩陣(型別必須為double)。這裡可以是二分類和多分類,類標是(-1,1)、(1,2,3)或者其他任意用來表示不同的類別的數字,要轉成double型別。
-training_instance_matrix

:訓練樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則為m x n的矩陣(型別必須為double)。當使用precomputed核時,[training_instance_matrix]由兩部分組成,第一列為長度m,從1-m的序號,第二列之後是訓練樣本核。例如:

model = svmtrain(trainlabel, ... #訓練樣本的標籤
            [(1 : size(trainfeat, 1))', trainfeat], ... #訓練樣本
            '-t 4 -q'); #引數

-libsvm_options:訓練的引數,在第3點詳細介紹。

2. 預測

libpredict函式用於對測試集的資料進行測試,還能對未知樣本進行預測。

[predicted_label, accuracy, decision_values/prob_estimates] 
    = libsvmpredict(testing_label_vector, testing_instance_matrix, model ['libsvm_options']);

這個函式包括四個引數,其中

-testing_label_vector:測試樣本的類標,如果有m個樣本,就是m x 1的矩陣(型別必須為double)。如果類標未知,可以初始化為任意m x 1的double陣列。
-testing_instance_matrix

:測試樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則為m x n的矩陣(型別必須為double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:預測的引數,與訓練的引數形式一樣。

3. 訓練的引數

LIBSVM訓練時可以選擇的引數很多,包括:

-s svm型別:SVM設定型別(預設0)
    0 — C-SVC1 –v-SVC2 – 一類SVM; 3 — e-SVR4 — 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(gamma):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/k,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:是否使用啟發式,01(預設1-wi weight:設定第幾類的引數C為weight*C (C-SVC中的C) (預設1-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2

以上這些引數設定可以按照SVM的型別和核函式所支援的引數進行任意組合,如果設定的引數在函式或SVM型別中沒有也不會產生影響,程式不會接受該引數;如果應有的引數設定不正確,引數將採用預設值。

4. 訓練返回的內容

libsvmtrain函式返回訓練好的SVM分類器模型,可以用來對未知的樣本進行預測。這個模型是一個結構體,包含以下成員:

-Parameters: 一個5 x 1的矩陣,從上到下依次表示:
    -s SVM型別(預設0);
    -t 核函式型別(預設2    -d 核函式中的degree設定(針對多項式核函式)(預設3);
    -g 核函式中的r(gamma)函式設定(針對多項式/rbf/sigmoid核函式) (預設類別數目的倒數);
    -r 核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)
-nr_class: 表示資料集中有多少類別,比如二分類時這個值即為2-totalSV: 表示支援向量的總數。
-rho: 決策函式wx+b中的常數項的相反數(-b)。
-Label: 表示資料集中類別的標籤,比如二分類常見的1和-1-ProbA: 使用-b引數時用於概率估計的數值,否則為空。
-ProbB: 使用-b引數時用於概率估計的數值,否則為空。
-nSV: 表示每類樣本的支援向量的數目,和Label的類別標籤對應。如Label=[1; -1],nSV=[63; 67],則標籤為1的樣本有63個支援向量,標籤為-1的有67個。
-sv_coef: 表示每個支援向量在決策函式中的係數。
-SVs: 表示所有的支援向量,如果特徵是n維的,支援向量一共有m個,則為m x n的稀疏矩陣。

另外,如果在訓練中使用了-v引數進行交叉驗證時,返回的不是一個模型,而是交叉驗證的分類的正確率或者回歸的均方根誤差。

5. 預測返回的內容

libsvmtrain函式有三個返回值,不需要的值在Matlab可以用~進行代替。

-predicted_label:第一個返回值,表示樣本的預測類標號。
-accuracy:第二個返回值,一個3 x 1的陣列,表示分類的正確率、迴歸的均方根誤差、迴歸的平方相關係數。注意:當使用預訓練核時,並不能取accuracy(1,1)作為分類結果,應該取:mean(predicted_label==testlabel)
-decision_values/prob_estimates:第三個返回值,一個矩陣包含決策的值或者概率估計。對於n個預測樣本、k類的問題,如果指定“-b 1”引數,則n x k的矩陣,每一行表示這個樣本分別屬於每一個類別的概率;如果沒有指定“-b 1”引數,則為n x k*(k-1)/2的矩陣,每一行表示k(k-1)/2個二分類SVM的預測結果。