什么是Hard-Margin SVM?指的是這個向量機只適用於“數據完全可分(seperately)”的情況。
(一)什么是支持向量機?
上述三條直線,選擇哪一條比較好?直覺上來說,最右面的那條直線最好。因為它的Margin比較胖,對數據點中混雜的噪聲容忍度更高,更加robust。所以以后我們在計算w的時候,加上一個限制條件:尋找Margin最胖的w。
w能將所有的點分開,等價於:對於所有的點,有ynwTxn > 0.
首先需要解決一個問題:如何衡量distance?
為了更好的表達這個問題,我們先明確一下符號的含義:
把w拆成兩部分。
現在我們已經知道了distance如何衡量,我們的問題轉化成:
這個問題是什么呢?以二維直線為例:對於一堆可以把所有數據點正確分類的直線,選擇margin(b,w)最大的直線。
現在來想:這些直線都是可以scaling的,假設我scaling所有的w,使得:
再次轉化問題:
現證明最終形式等價於上一個形式:
對於所有n條件下,尋找最小的|w|。假設找到一組(b,w)。且對於所有的n,有
(a>1)。必然存在一組(b/a, w/a),滿足條件,且具有更小的|w|。存在矛盾,所以必然有a=1.那么問題就等於於:
。證明完畢。
上述形式即為支持向量機。
我們可以看出,對於支持向量機,相當於在線性模型上加了一個限制條件,使得VC dimension減小。
具體的有:
這里的ρ代表的就是margin的大小。
支持向量機的好處是:
(二)如何計算SVM(1)
對於SVM這種形式呢,我們可以用一個叫做“二次規划”的工具來求解。
“二次規划”是一個工具程序,我們只要把SVM的輸入輸出改寫成符合“二次規划”要求的輸入輸出,利用現有的工具計算即可。
(三)如何計算SVM(2)
對於non-linear SVM,數據點的維度非常大
現在的問題是:對於nonlinear SVM,如何實現下述目標?
這需要非常多的數學知識,下面只講概況。
1)首先使用Lagrange Multipliers
2)對偶問題
其對偶問題只不過是將max與min位置互換。
補充說明:只有滿足KKT condition的情況下,原問題(primal)與對偶問題(dual)的最優解相同。
(第四個條件:primal-inner optimal,可以通過Lagrange Multipliers那一張PPT解釋)
繼續求解:
再根據KKT condition,我們可以利用α的值,表達出optimal (b,w)
PS:
1)根據
,當αn大於0時,必然有
,也即:第n個數據點在margin上;
2)同時,在計算w和b的時候,只有大於0的αn起作用。
所以對於αn> 0的數據點(zn, yn)稱之為支持向量。
這個支持向量不同於之前我們定義的支持向量,因為
兩個都為0的情況沒有考慮。
問題真的解決了么?沒有。兩個問題:
1)如果N很大的話,例如N=30000,那么單單存儲Q矩陣(N*N)就需要>3G RAM。所以我們需要特殊的、為SVM定制的QP程序;
2)我們並沒有實現目標,只是把計算復雜度給隱藏了。
(四)真正解決SVM:核函數
舉一個例子:
這樣的話:
OK,現在SVM問題解決了!
補充一點關於核函數的知識:
1)對於Polynomial 核函數,我們最常用的形式是:如下第三種形式
2)最好先從Q=1開始(先從線性模型開始做)
3)高斯核函數
因為高斯核函數很難從物理角度解釋,所以使用的使用必須慎重的選擇參數:
3)三種核函數比較: