支持向量機: Maximum Margin Classifier

支持向量機即 Support Vector Machine,簡稱 SVM 。我最開始聽說這頭機器的名號的時候,一種神祕感就油然而生,似乎把 Support 這麼一個具體的動作和 Vector 這麼一個抽象的概念拼到一起,然後再做成一個 Machine ,一聽就很玄了!

不過後來我才知道,原來 SVM 它並不是一頭機器,而是一種算法,或者,確切地說,是一類算法,當然,這樣摳字眼的話就沒完沒了了,比如,我說 SVM 實際上是一個分類器 (Classifier) ,但是其實也是有用 SVM 來做迴歸 (Regression) 的。所以,這種字眼就先不管了,還是從分類器說起吧。

SVM 一直被認爲是效果最好的現成可用的分類算法之一(其實有很多人都相信,“之一”是可以去掉的)。這裏“現成可用”其實是很重要的,因爲一直以來學術界和工業界甚至只是學術界裏做理論的和做應用的之間,都有一種“鴻溝”,有些很 fancy 或者很複雜的算法,在抽象出來的模型裏很完美,然而在實際問題上卻顯得很脆弱,效果很差甚至完全 fail 。而 SVM 則正好是一個特例——在兩邊都混得開。

好了,由於 SVM 的故事本身就很長,所以廢話就先只說這麼多了,直接入題吧。當然,說是入貼,但是也不能一上來就是 SVM ,而是必須要從線性分類器開始講。這裏我們考慮的是一個兩類的分類問題,數據點用 x 來表示,這是一個 n 維向量,而類別用 y 來表示,可以取 1 或者 -1 ,分別代表兩個不同的類(有些地方會選 0 和 1 ,當然其實分類問題選什麼都無所謂,只要是兩個不同的數字即可,不過這裏選擇 +1 和 -1 是爲了方便 SVM 的推導,後面就會明瞭了)。一個線性分類器就是要在 n 維的數據空間中找到一個超平面,其方程可以表示爲


一個超平面,在二維空間中的例子就是一條直線。我們希望的是,通過這個超平面可以把兩類數據分隔開來,比如,在超平面一邊的數據點所對應的 y 全是 -1 ,而在另一邊全是 1 。具體來說,我們令f(x)=wTx+b,顯然,如果 f(x)=0 ,那麼 x 是位於超平面上的點。我們不妨要求對於所有滿足 f(x)<0 的點,其對應的 y 等於 -1 ,而 f(x)>0 則對應 y=1 的數據點。當然,有些時候(或者說大部分時候)數據並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在,不過關於如何處理這樣的問題我們後面會講,這裏先從最簡單的情形開始推導,就假設數據都是線性可分的,亦即這樣的超平面是存在的。


如圖所示,兩種顏色的點分別代表兩個類別,紅顏色的線表示一個可行的超平面。在進行分類的時候,我們將數據點 x 代入 f(x) 中,如果得到的結果小於 0 ,則賦予其類別 -1 ,如果大於 0 則賦予類別 1 。如果 f(x)=0,則很難辦了,分到哪一類都不是。事實上,對於 f(x) 的絕對值很小的情況,我們都很難處理,因爲細微的變動(比如超平面稍微轉一個小角度)就有可能導致結果類別的改變。理想情況下,我們希望 f(x) 的值都是很大的正數或者很小的負數,這樣我們就能更加確信它是屬於其中某一類別的。

從幾何直觀上來說,由於超平面是用於分隔兩類數據的,越接近超平面的點越“難”分隔,因爲如果超平面稍微轉動一下,它們就有可能跑到另一邊去。反之,如果是距離超平面很遠的點,例如圖中的右上角或者左下角的點,則很容易分辯出其類別。


實際上這兩個 Criteria 是互通的,我們定義 functional margin 爲
γˆ=y(wTx+b)=yf(x)
,注意前面乘上類別 y 之後可以保證這個 margin 的非負性(因爲 f(x)<0 對應於 y=−1 的那些點),而點到超平面的距離定義爲geometrical margin 。不妨來看看二者之間的關係。

如圖所示,對於一個點 x ,令其垂直投影到超平面上的對應的爲 x0 ,由於 w 是垂直於超平面的一個向量(請自行驗證:因爲w就是超平面的法向量 所以垂直於超平面),我們有

(此處是由於兩向量平行得到)

又由於 x0 是超平面上的點,滿足 f(x0)=0 ,代入超平面的方程即可算出


不過,這裏的 γ 是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應的類別 y 即可,因此實際上我們定義 geometrical margin 爲:


顯然,functional margin 和 geometrical margin 相差一個 ∥w∥ 的縮放因子。按照我們前面的分析,對一個數據點進行分類,當它的 margin 越大的時候,分類的 confidence 越大。對於一個包含 n 個點的數據集,我們可以很自然地定義它的 margin 爲所有這 n 個點的 margin 值中最小的那個。於是,爲了使得分類的 confidence 高,我們希望所選擇的 hyper plane 能夠最大化這個 margin 值。

不過這裏我們有兩個 margin 可以選,不過 functional margin 明顯是不太適合用來最大化的一個量,因爲在 hyper plane 固定以後,我們可以等比例地縮放 w 的長度和 b 的值,這樣可以使得 f(x)=wTx+b 的值任意大,亦即 functional margin γˆ 可以在 hyper plane 保持不變的情況下被取得任意大,而 geometrical margin 則沒有這個問題,因爲除上了 ∥w∥ 這個分母,所以縮放 w 和 b 的時候 γ˜ 的值是不會改變的,它只隨着 hyper plane 的變動而變動,因此,這是更加合適的一個 margin 。

這樣一來,我們的 maximum margin classifier 的目標函數即定義爲


當然,還需要滿足一些條件,根據 margin 的定義,我們有


其中 γˆ=γ˜∥w∥ ,根據我們剛纔的討論,即使在超平面固定的情況下,γˆ 的值也可以隨着 ∥w∥ 的變化而變化。由於我們的目標就是要確定超平面,因此可以把這個無關的變量固定下來,固定的方式有兩種:一是固定 ∥w∥ ,當我們找到最優的 γ˜ 時 γˆ 也就可以隨之而固定;二是反過來固定 γˆ ,此時 ∥w∥ 也可以根據最優的 γ˜ 得到。

處於方便推導和優化的目的,我們選擇第二種,令 γˆ=1 ,則我們的目標函數化爲:


通過求解這個問題,我們就可以找到一個 margin 最大的 classifier ,如下圖所示,中間的紅色線條是 Optimal Hyper Plane ,另外兩條線到紅線的距離都是等於 γ˜ 的: 



到此爲止,算是完成了 Maximum Margin Classifier 的介紹,通過最大化 margin ,我們使得該分類器對數據進行分類時具有了最大的 confidence (實際上,根據我們說給的一個數據集的 margin 的定義,準確的說,應該是“對最不 confidence 的數據具有了最大的 confidence”——雖然有點拗口)。不過,到現在似乎還沒有一點點 Support Vector Machine 的影子。很遺憾的是,這個要等到下一次再說了,不過可以先小小地劇透一下,如上圖所示,我們可以看到 hyper plane 兩邊的那個 gap 分別對應的兩條平行的線(在高維空間中也應該是兩個 hyper plane)上有一些點,顯然兩個 hyper plane 上都會有點存在,否則我們就可以進一步擴大 gap ,也就是增大 γ˜ 的值了。這些點呢,就叫做 support vector ,嗯,先說這麼多了。

f(x)=wTx+b
γˆ=y(wTx+b)=yf(x)
發佈了17 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章