SVM(support vector machine,支持向量機)是最好的分類模型之一。通過尋找高維空間上的超平面,把樣本分隔爲兩類,並且計算複雜度並沒有因爲高維映射而增加。
間隔
在logistic迴歸中,通過logistic函數,我們得到介於[0,1]之間的預測值h(x)。h(x)>0.5,判定爲正類,反之判定爲負類。在建立概率模型時,我們把h(x)大小當做x屬於正類的概率,即,也就是屬於正類的置信度。
直觀地,我們觀察下面這幅圖:
在二維空間中,以一條直線分隔兩類樣本。其中A遠離分界面,C靠近分界面。我們直觀地感覺A屬於這一類的可能性會大於C。
於是,在分類建模是,我們會希望尋找一條分隔線,在所有樣本分隔正確的同時,使所有樣本儘可能遠離分隔線。我們稱這條分隔線爲最小間隔平面,也就是我們希望得到的最優分類器。下面具體定義間隔。
函數間隔
在線性分類中,我們定義如下的一種間隔:
Y屬於[-1或1],
Wtx+B項是線性擬合函數,類似logistic迴歸中得到的h(x)值,越大,屬於正類的可能性越大。
如果分類正確,y與wtx+B同號,置信度爲正,且越大,置信度越大。
如果分類錯誤,那麼得到一個負值。這種間隔稱爲函數間隔。
那麼,得到這麼一個結論:函數間隔越大,樣本正確分類置信度越大。
於是,在尋找最優分割平面時,我們可以以最小化函數間隔爲目標建模。
缺點:我們直接把w變爲2w,b變爲2b。那麼得到的預測值
的符號不會變,也就是分類效果不變。但是,得到的函數間隔擴大的兩倍。於是我們要引入歸一化方法。
我們可以設:
||w||=1或者用替代w,b。
幾何間隔
我們用更直觀的方法來定義間隔,如下:
直接用點到直線的歐式距離來定義間隔。根據幾何知識,我們可以寫出幾何間隔的公式:
可以看出,如果||w||==1,幾何間隔就變爲函數間隔。
最大間隔分類器
現在定義一種線性分類器,其尋找一條最大幾何間隔的分隔平面。根據上面函數間隔的定義,我們可以得到這種分類器的最優化式子:
其中r表示函數間隔,約束爲所有的樣本的函數間隔都大於這個最小間隔,||w||=1爲函數間隔歸一化約束。
上述的最優化問題中,||w||=1是非凸域,所以上式是一個非凸優化問題。我們轉而最大化幾何間隔,就可以去掉歸一化非凸約束,得到:
R還是函數間隔,不過現在目標函數維最小化幾何間隔,並且目標函數是非凸的。
考慮到我們可以隨意給w,b一個約束來歸一化,而不會改變結果。也就是我們可以隨意改變幾何距離的量綱。這裏,我們假設最優的函數間隔r=1,再把max改寫成min,得到:
終於,得到了一個二次凸規劃問題(QP),可以用簡單的最優化算法求得最優解。
拉格朗日對偶規劃
上述解得最優解,我們得到在當前空間上的最優分隔面。當時之前說過,SVM是在高維空間上的最優分隔平面。我們通過下面的方法,得到這種高維映射。
考慮一般的最優化問題:
我們可以寫出其拉格朗日乘子,得到:
根據等式約束最優性條件,解:
最後能夠得到原最優化問題的最優解。
關於不等式約束問題:
接下來我們要通過一定的變換,得到上述優化問題的等價形式,也就是其對偶規劃。
寫出拉格朗日乘子:
我們考慮下面這個優化問題:
也就是
觀察上面的問題,如果w不滿足約束,也就是。
這裏的變量是alfa,beta,那麼第一項是常數不變,第二項爲正數*alfa,第三項爲非零*beta。那麼,這個最優化問題最大值爲正無窮。
當w滿足約束,也就是
考慮到附加條件alfa>=0,於是其最大值只有在alfa=0時得到,後兩項均爲0。於是,上式等價於:
也就是是f(w)+約束的等價形式,即約束問題的無約束形式。
於是,有約束問題我們通過如上的方法,寫成無約束形式,如下:
我們直接交換min,max順序,得到稱爲對偶規劃的形式,如下:
原約束最優解爲P*,對偶問題的最優解爲d*。一般的,關於對偶問題,有:
Min max>=maxmin;
一個簡單的比喻就是:一羣胖子中的最瘦的會大於一羣瘦子中最胖的。
於是我們有:
經證明,在一定條件下,上面的式子取等號。也就是傳說中的KKT條件:
其中的條件:
稱爲KKT互補條件。也就是alfa,g至少有一個爲0。
小結:不等式優化問題可以寫成無約束問題,無約束問題可以再寫出其對偶規劃問題。在KKT條件下,原問題與對偶問題有相同的解。於是,我們可以在KKT條件下,解對偶問題,得到原問題的解。
對偶規劃運用於SVM問題
通過之前的推導我們得到SVM的最優化形式:
支持向量的來源
上式寫出其拉格朗日乘子的話,有乘子項:
根據KKT互補條件,只有一部分的gi(W)的係數alfai!=0,僅當g(w)=0,也就是這些樣本的幾何間隔爲1。也就是在求解的過程中,只有這部分對於最後的結果有影響。
直觀來看,如下圖:
無論其他點如何,最優的分割面只由最接近的三個樣本點決定,這些也就是SVM的支持向量。
繼續上面的推導,我們寫出SVM優化的拉格朗日乘子:
寫出KKT條件的兩個條件 :
以及:
帶回到拉格朗日乘子中,得到包含部分KKT條件的拉格朗日乘子形式:
*上面的步驟中,我們通過部分的KKT條件,用其他的變量表示w。
再根據對偶規劃理論,以及剩餘的KKT條件,得到如下的對偶問題:
其約束爲對偶KKT條件的附加項。有了附加KKT條件,對偶規劃的解也就是原規劃的解。
*至此,原優化問題完全等價於上面的優化問題。
解上述問題後,我們得到最優的alfa,再通過之前KKT的條件,我們可以解出w與b :
預測分類時,當一個測試樣本輸入時,我們如下計算:
也就是任意一個測試樣本,都要與所有的訓練樣本求內積。由此我們引出核方法來簡化計算。
核方法
對於一個樣本,我們可以寫出其高維組合,如下:
有這麼一種函數K(X,Z),其結果爲X,Z高維投影后的內積,也就是:
我們稱之爲核函數。
先假設我們有這樣的函數,並且其計算時間複雜度很低。那麼上面的SVM中,我們直接用核代替所有的內積,就能夠得到樣本高維投影的高維空間最優分隔平面。由於許多樣本是線性不可分的,但是投影到高維空間後,卻可以更好地尋找一個線性分隔面。如下:
以簡單的線性核函數爲例子闡述如下:
而考慮高維點積如下:
即核函數結果等於高維內積。
在考慮其時間複雜度:
核函數第一步的計算爲N爲向量點積後得到實數相乘,複雜度爲O(N)。
高維投影后,兩個N^2的向量點積,時間複雜度爲O(N^2)。
也就是說,我們通過核函數,用低維的計算量得到了高維的結果,沒有增加計算複雜度的同時,得到了性質更好的高維投影。也就是kernel trick。
Mercer定理
那麼,怎樣的函數,得到的結果會是原向量的高維內積呢?如下推導核函數的Mercer定理。
對於給定的任意向量集合:
核矩陣定義爲任意兩個向量核函數組成的矩陣,也就是:
對於任意的矩陣z,根據內積的非負性,我們有:
也就是說,K如果是核函數,那麼對於任意的樣本集合,得到的核矩陣爲半正定矩陣。