libsvm 训练后,模型参数详解
測(cè)試數(shù)據(jù)使用的是libsvm-mat自帶的heart_scale.mat數(shù)據(jù)(270*13的一個(gè)屬性據(jù)矩陣,共有270個(gè)樣本,每個(gè)樣本有13個(gè)屬性),方便大家自己測(cè)試學(xué)習(xí)。
首先上一個(gè)簡(jiǎn)短的測(cè)試代碼:
?
運(yùn)行結(jié)果:
?
這里面為了簡(jiǎn)單起見沒有將測(cè)試數(shù)據(jù)進(jìn)行訓(xùn)練集和測(cè)試集的劃分,這里僅僅是為了簡(jiǎn)單明了而已,分類結(jié)果估計(jì)可以不要管,參數(shù)優(yōu)化也不要管,另有帖子講解。
下面我們就看看 model這個(gè)結(jié)構(gòu)體里面的各種參數(shù)的意義都是神馬,model如下:
model =?
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
model.Parameters
我們先來看一下model.Parameters里面承裝的都是什么:
?
重要知識(shí)點(diǎn):
model.Parameters參數(shù)意義從上到下依次為:
-s svm類型:SVM設(shè)置類型(默認(rèn)0)
-t 核函數(shù)類型:核函數(shù)設(shè)置類型(默認(rèn)2)
-d degree:核函數(shù)中的degree設(shè)置(針對(duì)多項(xiàng)式核函數(shù))(默認(rèn)3)
-g r(gama):核函數(shù)中的gamma函數(shù)設(shè)置(針對(duì)多項(xiàng)式/rbf/sigmoid核函數(shù)) (默認(rèn)類別數(shù)目的倒數(shù))
-r coef0:核函數(shù)中的coef0設(shè)置(針對(duì)多項(xiàng)式/sigmoid核函數(shù))((默認(rèn)0)
即在本例中通過model.Parameters我們可以得知 –s 參數(shù)為0;-t 參數(shù)為 2;-d 參數(shù)為3;-g 參數(shù)為2.8(這也是我們自己的輸入);-r 參數(shù)為0。
關(guān)于libsvm參數(shù)的一點(diǎn)小說明:
Libsvm中參數(shù)設(shè)置可以按照SVM的類型和核函數(shù)所支持的參數(shù)進(jìn)行任意組合,如果設(shè)置的參數(shù)在函數(shù)或SVM類型中沒有也不會(huì)產(chǎn)生影響,程序不會(huì)接受該參數(shù);如果應(yīng)有的參數(shù)設(shè)置不正確,參數(shù)將采用默認(rèn)值。
model.Label model.nr_class
?
重要知識(shí)點(diǎn):
model.Label表示數(shù)據(jù)集中類別的標(biāo)簽都有什么,這里是 1,-1;
model.nr_class表示數(shù)據(jù)集中有多少類別,這里是二分類。
model.totalSVmodel.nSV
?
重要知識(shí)點(diǎn):
model.totalSV代表總共的支持向量的數(shù)目,這里共有259個(gè)支持向量;
model.nSV表示每類樣本的支持向量的數(shù)目,這里表示標(biāo)簽為1的樣本的支持向量有118個(gè),標(biāo)簽為-1的樣本的支持向量為141。
注意:這里model.nSV所代表的順序是和model.Label相對(duì)應(yīng)的。
model.ProbAmodel.ProbB
關(guān)于這兩個(gè)參數(shù)這里不做介紹,使用-b參數(shù)時(shí)才能用到,用于概率估計(jì)。
-bprobability_estimates: whether to train a SVC or SVR model for probabilityestimates, 0 or 1 (default 0)
model.sv_coef model.SVs model.rho
?
重要知識(shí)點(diǎn):
model.sv_coef是一個(gè)259*1的矩陣,承裝的是259個(gè)支持向量在決策函數(shù)中的系數(shù);
model.SVs是一個(gè)259*13的稀疏矩陣,承裝的是259個(gè)支持向量。
model.rho是決策函數(shù)中的常數(shù)項(xiàng)的相反數(shù)(-b)
在這里首先我們看一下 通過 –s 0 參數(shù)(C-SVC模型)得到的最終的分類決策函數(shù)的表達(dá)式是怎樣的?
這里如果有關(guān)于C-SVC模型不懂的地方,請(qǐng)看這個(gè)pdf文件:
libsvm_library.pdf
附件:
最終的決策函數(shù)為:
在由于我們使用的是RBF核函數(shù)(前面參數(shù)設(shè)置 –t 2),故這里的決策函數(shù)即為:
其中|| x-y ||是二范數(shù)距離 ;
這里面的
b就是-model.rho(一個(gè)標(biāo)量數(shù)字);
b = -model.rho;
n代表支持向量的個(gè)數(shù)即 n = model.totalSV(一個(gè)標(biāo)量數(shù)字);?
對(duì)于每一個(gè)i:
wi =model.sv_coef(i); 支持向量的系數(shù)(一個(gè)標(biāo)量數(shù)字)
xi = model.SVs(i,:) 支持向量(1*13的行向量)
x 是待預(yù)測(cè)標(biāo)簽的樣本 (1*13的行向量)
gamma 就是 -g 參數(shù)
好的下面我們通過model提供的信息自己建立上面的決策函數(shù)如下:
?
有了這個(gè)決策函數(shù),我們就可以自己預(yù)測(cè)相應(yīng)樣本的標(biāo)簽了:
?
最終可以看到 flag = 270 ,即自己建立的決策函數(shù)是正確的,可以得到和svmpredict得到的一樣的樣本的預(yù)測(cè)標(biāo)簽,事實(shí)上svmpredict底層大體也就是這樣實(shí)現(xiàn)的。
最后我們來看一下,svmpredict得到的返回參數(shù)的意義都是什么
在下面這段代碼中 :
?
運(yùn)行可以看到
?
這里面要說一下返回參數(shù)accuracy的三個(gè)參數(shù)的意義。
重要的知識(shí)點(diǎn):
返回參數(shù)accuracy從上到下依次的意義分別是:
分類準(zhǔn)率(分類問題中用到的參數(shù)指標(biāo))
平均平方誤差(MSE(mean squared error)) [回歸問題中用到的參數(shù)指標(biāo)]
平方相關(guān)系數(shù)(r2(squared correlation coefficient))[回歸問題中用到的參數(shù)指標(biāo)]
其中mse 和r2的計(jì)算公式分別為:
插圖:
寫在后面的話,至此關(guān)于model中相應(yīng)參數(shù)的一些意義,以及到底如果得到?jīng)Q策函數(shù)的表達(dá)式或者計(jì)算方式的就算是說的很明了了。
可能還有的同學(xué)會(huì)問,如何得到分類決策函數(shù)中的那個(gè)alpha系數(shù)【這個(gè)肯定會(huì)有人問】,還是再磨嘰說一下吧:
上面的wi其實(shí)是alpha和支持向量的類別標(biāo)簽(1或-1的乘積),原始決策函數(shù)的表達(dá)式如下:
插圖:
上面的yi是支持向量的類別標(biāo)簽(1或者-1),在libsvm中將yi和alpha的乘積放在一起用model.sv_coef(w)來承裝。
都說到這份上,應(yīng)該能明白了嗎?
總結(jié)
以上是生活随笔為你收集整理的libsvm 训练后,模型参数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 共轭梯度法求解线性方程组
- 下一篇: 多目标遗传算法优化