LibSVM學習(五) 分界線的輸出

2021-05-02 12:16:19 字數 3104 閱讀 9199

對於學習svm人來說,要判斷svm效果,以圖形的方式輸出的分解線是最直觀的。libsvm自帶了乙個視覺化的程式svm-toy,用來輸出類之間的分界線。他是先把樣本檔案載入,然後進行訓練,通過對每個畫素點的座標進行判斷,看屬於哪一類,就附上那類的顏色,從而使類與類之間形成分割線。我們這一節不討論svm-toy怎麼使用,因為這個是「傻瓜」式的,沒什麼好討論的。這一節我們主要**怎麼結合訓練結果檔案,自己程式設計輸出分界線。

為什麼說是分界線呢,其實嚴格說來是分解超平面,但是我們為了能直觀用繪圖工具繪(比如matlab)出圖來只能輸出具有二維(也就是特徵數是2)的樣本分界,因此也就成了線了。好了,閒話少說,進入正題。要繪分界線,就要用到訓練結果,我們在第二節和第三節都討論了,訓練結果(或訓練模型)檔案怎麼輸出,但是,沒怎麼詳細說明怎麼使用訓練結果,現在具體說明。下面是兩個模型檔案: 

圖5.1 兩類模型檔案                                 圖

5.2

三類模型檔案

從圖5.1

和5.2

比較可以看出,兩類只存在乙個分類器,因此每個支援向量對應的係數α(也就是

sv的第一排

),也只有1

個(當然,截距

rho也只有乙個)。這種情況最簡單,只要把相應的支援向量和α的值帶入方程:

找到為0

的解,就是分界點了。(式中,有些文獻是+b,

libsvm

採用的是-b)

對於三類或多類時,情況就比較複雜。我們原來討論過,對於類數

k>2

的情況,分類器個數為k×

(k-1)/2

個,那麼對應的

b值(也就是

rho)應該也是k×

(k-1)/2

個。那麼每個支援向量對應的係數α

是多少呢?是

k-1個,因為每個支援向量(

sv)與其他每個類都有乙個係數相對應。當然,和有的類對應時可能不是標準支援向量

(0,但是至少和其中乙個類對應是標準的。我們先看一下圖

5.2的

sv的資料結構: 各

nsv對應的αi

yi特徵1

特徵2 類

0(label

為-1)前13

0 - v -

1

0 - v -

2

1:0.297595

2:1.197805

0.4800095239454689

0.2016577869168293

類1(label為0)

中間9個

1 - v -

0

1 - v -

2

1:3.621706

2:1.263636

-0.6580578158072528

0.7036762846823739

類2(label為1)

後8個

2 - v -

0

2 - v -

1

1:8.296066

2:7.225341

-0.7056286598529473

-0.6494097661702236

從表中,可以看出,每個支援向量

(sv)

都有相應的

k-1(這裡的k為

3)個α

,後面就是向量的資料。因此,輸出分界線時,只要認清係數的位置就可以了。如要輸出類0和類

2之間的分界線,就要帶入類

0的第二列和類2的第

1列中的α。

這裡需要重點說明的是:檔案輸出的不是單純的α

,實際上是αiyi

(這裡的

yi是在訓練時的+1或

-1,而不是原始樣本的

label

),因此在帶入

5.1式時,不需要判斷

yi的值了。

了解了資料結構以後,就是求解方程。

5.1式是個多元方程(這和

x的維數有關,這裡討論的是

2維的,因此是二元方程),而只有乙個等式,因此要對其中乙個引數做定常處理。先求出其中乙個引數的範圍,不妨設為

x[0]

(在繪圖時相當於

x座標軸)

x_max

和x_min

,然後分成

100等分,對每乙個節點處

x[0]i = i

×(x_max- x_min)/100+ x_min

這樣,x[0]

就相當於固定了,然後代入

5.1式求

x[1]

(也就是

y)。這就轉化成了一元方程,可以採用傳統的數學解法,這裡,我採用的是網路遍曆法。也就是對

x[1]

也分成100

分進行遍歷,把節點處的

x[1]:

x[1]j = j

×(y_max- y_min)/100+ y_min

代入5.1

式,看是否接近於

0,如果接近

0,說明此點是邊界點,然後輸出座標就可以了。

for(i = 0; i < 100; i ++)

for(j = 0; j < 100; j ++)

分界點座標輸出以後,就可以用

matlab

把分界線繪製出來了。

LibSVM學習(五) 分界線的輸出

對於學習svm人來說,要判斷svm效果,以圖形的方式輸出的分解線是最直觀的。libsvm自帶了乙個視覺化的程式svm toy,用來輸出類之間的分界線。他是先把樣本檔案載入,然後進行訓練,通過對每個畫素點的座標進行判斷,看屬於哪一類,就附上那類的顏色,從而使類與類之間形成分割線。我們這一節不討論svm...

libsvm 學習筆記

libsvm中tools 中提供了乙個一條龍式的程式 easy.py 出於興趣對原碼做了一些學習 if len sys.argv 1 print usage training file testing file format sys.argv 0 raise systemexit 1 sys.arg...

MATLAB 機器學習 安裝LIBSVM

本文僅僅介紹window下安裝步驟。3 新增路徑 主頁 設定路徑 新增資料夾及其子資料夾 解壓的資料夾裡的乙個資料夾windows即e program files libsvm 3.21 windows 儲存後關閉即可。tip 其實網上,大多數部落格都有介紹需要,mex進行c語言編譯,在我的安裝過程...