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

2021-06-06 05:52:49 字數 2194 閱讀 4262

對於學習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

各nsv對應的αiyi

特徵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語言編譯,在我的安裝過程...