svmtrain筆記 svmtrian函式

2021-09-18 08:07:57 字數 4030 閱讀 1678

svmtrain函式

model= svmtrain(train_label, train_matrix, [『libsvm_options』]);

其中:train_label表示訓練集的標籤。

train_matrix表示訓練集的屬性矩陣。

libsvm_options是需要設定的一系列引數,各個引數可參見help svmtrain。如果用回歸的話,其中的-s引數值應為3。

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

libsvm 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說白了就是窮舉。

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

model:是訓練得到的模型,是乙個結構體(如果引數中用到-v,得到的就不是結構體,對於分類問題,得到的是交叉檢驗下的平均分類準確率;對於回歸問題,得到的是均方誤差)。

parameters: [5x1 double]  %結構體變數,依次儲存的是 -s -t -d -g -r等引數

nr_class: 4 %分類的個數

totalsv: 39 %總的支援向量個數

rho: [6x1 double] %b=-model.rho

label: [4x1 double]

proba:

probb:

nsv: [4x1 double] %每一類的支援向量的個數

sv_coef: [39x3 double] %支援向量的係數

svs: [39x12 double] %具體的支援向量,以稀疏矩陣的形式儲存

w*x+b=0 其中

w=model.svs'*model.sv_coef

b=-model.rho

w是高維空間中分類 超平面的法向量,b是常數項。

輸出的結果為

optimization finished,

#iter = 162

nu = 0.431029

obj = -100.877288,

rho = 0.424462

nsv = 132,

nbsv = 107

total nsv = 132

其中,#iter為迭代次數,

nu是你選擇的核函式型別的引數,

obj為svm檔案轉換為的二次規劃求解得到的最小值,

rho為判決函式的偏置項b,

nsv為標準支援向量個數,

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

total nsv為支援向量總個數(對於兩類來說,因為只有乙個分類模型total nsv = nsv,

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

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

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

(2) 如果樣本的特徵數非常多,那麼就不必使用rbf核將樣本對映到高維空間。

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

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

(3) 樣本數《特徵數的情況:

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

(4) 樣本數和特徵數都非常多:推薦使用liblinear,更少的時間和記憶體,可比的準確率。

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

svm 怎樣能得到好的結果

對資料做歸一化(****** scaling)

應用 rbf kernel

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

用得到的最優c和g訓練訓練資料測試

關於svm的c以及核函式引數設定----------------------

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

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,其中均方差反映了資料波動的大小。

引數通常可選擇下面幾個數的倒數: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。

svmtrain函式引數

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 r u v 2 3 sigmoid tanh r...

svmtrain的返回引數

parameters 乙個5 x 1的矩陣,從上到下依次表示 s svm型別 預設0 t 核函式型別 預設2 d 核函式中的degree設定 針對多項式核函式 預設3 g 核函式中的r gamma 函式設定 針對多項式 rbf sigmoid核函式 預設類別數目的倒數 r 核函式中的coef0設定 ...

svmtrain返回值的引數解釋

parameters 5x1 double 結構體變數,依次儲存的是 s t d g r等引數 nr class 1025 分類的個數 totalsv 3015 總的支援向量個數 rho 5151x1 double b model.rho label 102x1 double proba probb...