通過跟高斯“核”的結合,支持向量機可以表達出非常復雜的分類界線,從而達成很好的的分類效果。“核”事實上就是一種特殊的函數,最典型的特征就是可以將低維的空間映射到高維的空間。
我們如何在二維平面划分出一個圓形的分類界線?在二維平面可能會很困難,但是通過“核”可以將二維空間映射到三維空間,然后使用一個線性平面就可以達成類似效果。也就是說,二維平面划分出的非線性分類界線可以等價於三維平面的線性分類界線。於是,我們可以通過在三維空間中進行簡單的線性划分就可以達到在二維平面中的非線性划分效果。
圖 三維空間的切割
SVM的英文全稱是Support Vector Machines,我們叫它支持向量機。支持向量機是我們用於分類的一種算法。讓我們以一個小故事的形式,開啟我們的SVM之旅吧。
在很久以前的情人節,一位大俠要去救他的愛人,但天空中的魔鬼和他玩了一個游戲。
魔鬼在桌子上似乎有規律放了兩種顏色的球,說:"你用一根棍分開它們?要求:盡量在放更多球之后,仍然適用。"
於是大俠這樣放,干的不錯?
然后魔鬼,又在桌上放了更多的球,似乎有一個球站錯了陣營。顯然,大俠需要對棍做出調整。
SVM就是試圖把棍放在最佳位置,好讓在棍的兩邊有盡可能大的間隙。這個間隙就是球到棍的距離。
現在好了,即使魔鬼放了更多的球,棍仍然是一個好的分界線。
魔鬼看到大俠已經學會了一個trick(方法、招式),於是魔鬼給了大俠一個新的挑戰。
現在,大俠沒有棍可以很好幫他分開兩種球了,現在怎么辦呢?當然像所有武俠片中一樣大俠桌子一拍,球飛到空中。然后,憑借大俠的輕功,大俠抓起一張紙,插到了兩種球的中間。
現在,從空中的魔鬼的角度看這些球,這些球看起來像是被一條曲線分開了。
再之后,無聊的大人們,把這些球叫做data,把棍子叫做classifier, 找到最大間隙的trick叫做optimization,拍桌子叫做kernelling, 那張紙叫做hyperplane。
線性SVM
先看下線性可分的二分類問題。
上圖中的(a)是已有的數據,紅色和藍色分別代表兩個不同的類別。數據顯然是線性可分的,但是將兩類數據點分開的直線顯然不止一條。上圖的(b)和(c)分別給出了B、C兩種不同的分類方案,其中黑色實線為分界線,術語稱為“決策面”。每個決策面對應了一個線性分類器。雖然從分類結果上看,分類器A和分類器B的效果是相同的。但是他們的性能是有差距的,看下圖:
在"決策面"不變的情況下,我又添加了一個紅點。可以看到,分類器B依然能很好的分類結果,而分類器C則出現了分類錯誤。顯然分類器B的"決策面"放置的位置優於分類器C的"決策面"放置的位置,SVM算法也是這么認為的,它的依據就是分類器B的分類間隔比分類器C的分類間隔大。這里涉及到第一個SVM獨有的概念"分類間隔"。在保證決策面方向不變且不會出現錯分樣本的情況下移動決策面,會在原來的決策面兩側找到兩個極限位置(越過該位置就會產生錯分現象),如虛線所示。虛線的位置由決策面的方向和距離原決策面最近的幾個樣本的位置決定。而這兩條平行虛線正中間的分界線就是在保持當前決策面方向不變的前提下的最優決策面。兩條虛線之間的垂直距離就是這個最優決策面對應的分類間隔。顯然每一個可能把數據集正確分開的方向都有一個最優決策面(有些方向無論如何移動決策面的位置也不可能將兩類樣本完全分開),而不同方向的最優決策面的分類間隔通常是不同的,那個具有“最大間隔”的決策面就是SVM要尋找的最優解。而這個真正的最優解對應的兩側虛線所穿過的樣本點,就是SVM中的支持樣本點,稱為"支持向量"。