Support Vector Machine 這個名字挺唬人的,其實思想很樸實:我們有兩堆數(shù)據(jù)(分別標記為「+1類」和「-1類」),想在它們之間找一個分界面,使得兩邊的點距離這個分界面都夠遠。這就相當于在兩組點中間劃出一塊深溝,所謂的 support vector(支撐向量)就是卡住邊線的那些點(數(shù)學家喜歡把「點」叫做「向量」)。

分界面
我們令f(x) = w x + b,假設分界面為w x + b = 0,即f(x) = 0,且滿足:標記為+1的點f(x) > 0,標記為-1的點f(x) < 0。那么可以算出某個數(shù)據(jù)點距離分界面的距離γ為:

但這個γ是帶正負號的,為了保證γ永遠為正,我們給它乘以sign( f(x) )(也就是標記的y值):

我們的目標是,讓找到的那個分界面的γ值最大:

γ其實是一個以 w 和 b 為參數(shù)的函數(shù)。我們調整不同的 w 和
b 得到不同的劃分方式。

w = (0.7, -1), b = 1, γ = 1.67011

w = (0.2, -1), b = 1, γ = 0.159801
我們把它畫出來看看:

L(w, b)
最大值點在(0.78801, 1.22344),其值為2.18479。

換個角度
至于具體怎么找到最大值點的就不寫了,大概是用核方法[1]把數(shù)據(jù)映射到高維空間,再用 Lagarange 乘數(shù)法的進階版本找到極值點。
太多技術細節(jié)了,心累??
P.S. 據(jù)說 SVM 做手寫數(shù)字識別的精度可以媲美深度學習?? 但我還是不喜歡它,因為它直接一步跳到了結果,中間沒有任何人類可以嫁接的知識樹(表征)。
參考資料:
- pluskid 的《支持向量機系列》
-
核方法的好處是:既能享受到數(shù)據(jù)在高維展開以使其線性可分的好處,又能避免高維空間的運算量爆炸。 ?