前言
衆所周知 SVM 是非常強大的一種分類算法,有着媲美神經網絡的分類效果,實作過程卻簡單得多。受限于我的能力,這篇文章不會系統地介紹 SVM(因為我并不是線性代數、凸優化等方面的專家),而是以一個學習者的角度描述 SVM 産生的過程,由于内容較長,計劃分成三到四篇
一個好的分類是怎麼樣的
圖中的兩組資料,顯然它們是線性可分(linear separable)的,圖裡給出的三條分界線都可以準确區分這兩類資料,它們是不是一樣好?如果不是,哪一條看起來更加合适?

直覺告訴我們是 a。相比之下,b 和 c 離個别點太近了,我們很難拍着胸脯說“這個點在分界線下面,是以絕對是 X",因為分界線稍微挪一挪就可以改變這些點的屬性,我們想要的是一個相對自信的分界線,使靠近分界線的點與分界線的距離足夠大,上圖中的分界線 a 就符合我們的需求。
ps. 這裡所說的分界線嚴格來說是 decision boundary,decision boundary 在二維空間是一條線,在三維空間是一個平面,更高維的空間裡稱作超平面,為了友善本文都用分界線來代表 decision boundary。
進入向量的世界
你或許已經注意到 SVM 的全稱是 Support Vector Machine(支援向量機),在推導 SVM 公式過程中,我們幾乎都是在和向量打交道。剛接觸 SVM 的時候我對這個名字非常詫異,SVM 很強是沒錯,但是名字也太「随意」了吧?希望寫完這篇文章以後我能了解為什麼這種算法叫做支援向量機。
如果你之前沒有接觸過向量,建議花一個小時左右的時間熟悉一下向量的概念和基本性質。我們先把空間上的點用向量來表示(以原點為起點的向量):
雖然寫成了向量的形式,其實并沒有什麼大不了的,我們可以把它和國中時候學過的直線表達式聯系起來:
對于 SVM 來說僅僅這樣是不夠的,還記得嗎我們要修一條路出來,我們得確定在一條足夠寬的路裡面沒有資料點:
這樣前面的式子就可以寫成更為簡潔的形式:
什麼是支援向量
這是一個基于 KKT 條件的二次規劃問題,優化原理的内容超出了這篇文章的範疇,在這裡我們隻要知道拉格朗日乘數法可以求得這個最優解,引入新的系數αi :
令以上兩式為0,我們可以得到:
原文釋出時間為:2018-03-17