對於學習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語言編譯,在我的安裝過程...