1. 程式人生 > >支援向量機SVM 簡要推導過程

支援向量機SVM 簡要推導過程

SVM 是一塊很大的內容,網上有寫得非常精彩的部落格。這篇部落格目的不是詳細闡述每一個理論和細節,而在於在不丟失重要推導步驟的條件下從巨集觀上把握 SVM 的思路。

1. 問題由來

SVM (支援向量機) 的主要思想是找到幾何間隔最大的超平面對資料進行正確劃分,與一般的線性分類器相比,這樣的超平面理論上對未知的新例項具有更好的分類能力。公式表示如下:

 : 所有點中最小的幾何間隔, 實際上就是支援向量上的點的幾何間隔

 : 訓練樣本及對應標籤, , 作用是將第 i 個樣本點的幾何間隔轉化為正數

公式的意思是假設每個訓練樣本點的幾何間隔至少是 , 求  的最大值。

由於幾何間隔(沒帽子)和函式間隔

(有帽子)的關係是:

最大化  可以固定  ,求 ||w|| 的最小值或者固定 ||w||, 求  的最大值,一般選擇前者: 固定函式間隔為 1, 將 \gamma = 1/||w|| 帶入上式,同時為了計算方便, 目標函式等價於最小化 ||w||^2 ,約束優化問題轉化為:

這是一個 QP 優化問題。

2. 對偶問題

利用拉格朗日乘子法將約束條件融入到目標函式:

SVM 的原始問題實際上是一個極小極大問題:

這個表示式有幾個變數,先從哪一個著手?答案是  , 至於為什麼,實際上是根據下面這個優化函式將原始問題的約束條件——函式間隔必須不小於 1 轉化到拉格朗日乘子  向量上去的,先看函式的後面一部分:

很容易可以看出,如果樣本點 xi 滿足約束條件,即有 , 上式求最大,必定有 ,  alpha 與後面括號裡面的式子必有一個為 0 (VI) 所有的樣本點都滿足約束條件,極小極大問題就轉化為  , 如果有一個樣本點不滿足約束條件,alpha 值取無窮大,上式將取無窮大,顯然是沒有意義的。實際上,這段論述就說明了原始問題具有 KKT 強對偶條件,對於原始問題來說需要滿足的 KKT 條件有哪些呢?

倒數兩個條件是原始問題的條件,肯定成立。第一個條件是上面討論過的條件:

  • 當樣本不在支援向量上,alpha 一定等於 0, w 在不等式2的內部,這是一個鬆的約束,L 函式就等於 1/2||w||^2 , 取它的偏導為0就可以了。
  • 當樣本點在支援向量上時, w 在不等式2的邊界上,這是一個等式約束,這就和普通的拉格朗日等式約束相同,在最優點目標函式和約束條件函式的導數平行。用 wiki 的一張圖來表示:

原始問題滿足 KKT 條件,可以轉化成一個最優解等價的對偶極大極小問題,先對極小部分求偏導:

得到對偶最優化問題:

對於一個新來的樣本,將上面 w 的值帶入 f(x) = w^T·x + b, 可以知道要判斷新來的點,我們只需要計算它與訓練點的內積即可,這是 kernel trick 的關鍵:

3. 軟間隔

軟間隔問題是應對 outliers 的一種方法。軟間隔問題可以建立目標函式:

與硬間隔的優化方法相似,得到的解是:

4. Kernel Method

 核方法是一種很巧妙的方法,既可以將特徵對映到較高的維度,又可以地利用了 SVM 的內積運算避免了維度計算量的爆炸。最後的最優化問題與硬間隔優化問題相似,只要將兩個樣本的內積改為兩個樣本的核函式即可 (kernel substitution) :

當然,你也可以將兩個樣本的內積看做最簡單的核函式。Kernel method 不僅可以用在 SVM 上,還可以用在 PCA、線性分類器上等,以後再專門寫一篇 kernel method 的部落格。

參考資料:

[2] 統計學習方法, 李航 著