Udacity
Machine Learning
Support Vector Machine
在做分類問題時,想要找到最好的那條線:
會選擇中間的那條線,為什么沒有選擇平行的另外兩條線,因為它們屬于 Overfitting ,過度相信了 training data,
那要怎么樣找到這條線呢:
注意此時的 y 是分類用的 label,要么是 +1,要么是 -1 。
需要思考一個問題是,在沿著這條線上的點,它們的 Label 是什么呢?是0。
所以這個 Boundary Line 會有3個可能值,同時想要兩條灰色線之間的距離最大。
那么怎么計算這條線的距離呢
可以在兩條灰色線各取一個點,然后計算它們之間的距離,也就是在 +1 和 -1 的兩條線上取點。
x1-x2 和這條線的方向是一樣的,我們想要這條線達到最大,那就需要 norm(W) 越小,等式左邊的部分叫做 Margin。
所以我們的目標就是,找到一個 Decision Boundary 來最大化 Margin。
這樣就可以很好地分類。而這個問題就轉化到了等式右邊,也就是要最大化 2/norm(W),并且可以正確地分類 。
把這個問題轉化為數學問題是:
而最大化 2/norm(W) 這個問題,可以進一步轉化為更簡單的問題,這是個 Quadratic Programming Problem:
進一步還等價于下面這個問題:
關于上面這個問題,有一些特質:
1.如果知道了 alpha,就可以得到 w,知道了 w,就可以知道 b
2.通常情況下,大多數 alpha=0,意味著這些點對w沒有影響
也就是說,為了找到這個解,有些 vector 是沒有貢獻的,你只需要從少數的 vector 就可以獲得找到最優 W 的 support。
即,構建一個 machine,只包含這些 support vector,即這些非零的 alpha 相應的點。
直觀上看,0-alpha 就是離 Decision Boundary 比較遠的那些點,它們很難對這條線做貢獻。
有點像 KNN,因為只有 local points 起作用,但是前提是你已經知道哪些 points matter。
求解這個問題,其實是在找到底哪些點可以 throw away。
Xi transpose Xj,意義是,一個向量在另一個向量的投影,如果垂直則為0,如果方向相同,則為正,如果相反,則為負,所以這是一個 similarity 的表示。
有時并不能完全地分出兩類,但是可以讓誤差最小。
對于下面這個數據,我們想得到一個 circle
一類在圈內,一類在圈外,用 phi 這個三維的函數就可以分開,而不需要事先知道誰是正是負。但是卻不需要用 phi,因為它可以用 (X‘T)^2 來表示。
公式里的 Xi'Xj 可以用 kernel 來表示,來衡量 Similarity
意義就是 向更高維度的空間投影,在高維空間里就可以被 linearly seperated。
下面這幾種形式都可以作為 kernel。
第三個是多項式。
第四個是 radial basis kernel,如果 x和y 很近,那么 k 就趨近于 1,如果 x和y 很遠,那么 k 就趨近于 0,而且加上平方之后,這個還是對稱的。
第五個更像是 sigmoid。
kernel function 可以有很多,而且它的應用也很廣,可以用于 string 和 figure。
這些都屬于 Mercer Condition,是一種用距離去衡量的方法,而不是隨意地構造。
總結:
1.Margin 很重要,它關系著 Generalization 還是 Overfitting
2.目標是 Margin 的最大化
3.Margin 最大化的方法:Quadratic Problem
4.在QP中知道了什么是 Support Vector,只需要一個子集就可以建立 Classifier
5.Kernel Trick:通過向高維空間投影,把低維的非線性 Boundary 轉化為高維空間的線性 classifier。
另外關于SVM,July有一篇非常詳細的博文:
http://blog.csdn.net/v_july_v/article/details/7624837