1. 程式人生 > >SVM算法推導

SVM算法推導

angle 1.0 分享 數據線 不能 || 構建 nco 點積

1,SVM算法的思考出發點

SVM算法是一種經典的分類方法。對於線性可分問題,找到那個分界面就萬事大吉了。這個分界面可以有很多,怎麽找呢?SVM是要找到最近點距離最遠的那個分界面。有點繞,看下面的圖就明白了

技術分享

為了推導簡單,我們先假設樣本集是完全線性可分的,也就一個分界面能達到100%的正確率。

2,線性可分的情況

(1)優化目標的建立

最近點距離最遠的分界面,這句話得用數學式子表示出來,這樣才能用數學工具進行求解。

首先,假設分界面是y=wx+b,點\(x_i\)距離平面的距離用數學表達是\(\gamma_i=\frac{y_i(wx_i+b)}{||w||}\),這個是我們在中學學過的點到平面的距離,我們稱之為幾何距離。因為點分布在平面的兩側,所以這裏乘以了\(y_i\)。

“最近點”該如何表達呢?

\(\gamma\)

s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\gamma, i=1,2,...N\)

最近點距離最遠的分界面,就是要上面的距離最大,用數學語言表示為

\(max_{w,b} \gamma\)

s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\gamma, i=1,2,...N\)

到目前為止,我們的目標函數已經得到。

分析這個目標函數,這是個有約束的優化問題,但是要求解的w在分母上,為了方便求解,我們做一些整理,原優化問題為,

\(max_{w,b}\frac{y^*(w\cdot x^*+b)}{||w||}\)

s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\frac{y^*(w\cdot x^*+b)}{||w||}, i=1,2,...N\)

其實\(y^*(w\cdot x^*+b)\)的值對最終的結果沒有影響,就像y=ax+b與2y=2ax+2b其實是一樣,所以不妨讓\(y^*(w\cdot x^*+b)=1\),這樣目標函數變為,

\(max_{w,b}\frac{1}{||w||}\)

s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)

在考慮到最大化\(\frac{1}{||w||}\)和最小化\(||w||^2\)的等價的,目標函數可以寫成如下形式

\(min_{w,b}\frac{1}{2}||w||^2\)

s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)

這樣就變成了一個容易求解的凸二次規劃問題。

(2)優化目標的求解

對於凸二次規劃問題,常用的求解方法就是拉格朗日對偶算法。

對偶問題和原問題的解是否相同呢?只有相同,我們才能用對偶算法。按照李航《統計學習方法》附錄C,定理C.2,

技術分享

回到我們的目標函數,因為數據線性可分,肯定存在w,使得所有不等式小於0(目標函數中的約束不等式取個負號,大於等於變成小於等於)。因此,我們可以通過求解對偶問題得到原始問題的解。

首先,構建拉格朗日函數,將不等式約束去除,

\(L(w,b,\alpha)=||w||^2-\sum_{i=1}^N\alpha_iy_i(w\cdot x_i+b)+\sum_{i=1}^N\alpha_i\),要求\(\alpha_i>=0\)

原始問題的對偶問題是極大極小問題,

\(max_\alpha min_{w,b}L(w,b,\alpha)\)

下面開始求解這個問題

技術分享

接下來求解相應的\(\alpha\),這裏不在詳述。

求解出\(\alpha\),根據定理C.3,求解原問題的解

技術分享

假設\(\alpha^*\)是對偶問題最優解,\(w^*,b^*\)是原始問題最優解,根據KKT條件成立,即得:

(1)\(\triangledown L(w^*,b^*,\alpha^*)=w^*-\sum_{i=1}^N \alpha_i^* y_i x_i=0\),得到\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)

(2)\(\triangledown L(w^*,b^*,\alpha^*)=-\sum_{i=1}^N \alpha_i^*y_i=0\)

(3)\(a_i^*(y_i(w^* \cdot x_i+b^*)-1)=0\),i=1,2,3..N

(4)\(y_i(w^* \cdot x_i+b^*)-1\)>=0,i=1,2,..N

(5)\(a_i^*>=0\),i=1,2,...N

至少有一個\(\alpha_j>0\),這個可以用反證法證明,假設\(\alpha^*=0\),由(1)得\(w^*=0\),但是\(w^*=0\)不是原問題的一個解,因此肯定存在\(\alpha_j>0\),那麽根據(3)得到

\(y_j(w^* \cdot x_j+b^*)-1=0\)

左後乘以\(y_j得到\)

\(b^*=y_i-\sum_{i=1}^N \alpha_i^* y_i (x_i \cdot x_j)\)

由此,得到了分類超平面的w和b,決策函數可以寫成

\(f(x) = sign(\sum_{i=1}^N \alpha_i y_i (x_i \cdot x)+b^*)\) (*)

由此可以看出,分類決策函數只依賴於輸入x和訓練樣本的內積。前面分析過存在\(\alpha_j>0\),那麽根據(3)可以得到\(y_j(w^* \cdot x_j+b^*)-1=0\),\(\alpha_j>0\)對應的樣本叫做支持向量,它們分布於分隔邊界上。還有一部分樣本,它們分布在分隔邊界裏,這些樣本滿足\(y_i(w^* \cdot x_i+b^*)-1>0\),那麽根據(3)可知,這些樣本對應的\(\alpha\)分量為0。所以,從(*)式看到,一個新來的樣本x被分成哪個類,至於支持向量有關,而與其它訓練樣本無關,因為它們對應的\(\alpha_i\)為0.

3,線性可分但是存在異常點

實際情況中,用來訓練模型的數據,很少有完全線性可分,總是存在部分異常點。而在2部分推導的模型,顯然沒有考慮這種情況。

在2部分得到的優化目標是

\(min_{w,b}\frac{1}{2}||w||^2\)

s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)

為了使這個優化目標能夠容忍異常,我們為每個樣本點添加個松弛因子\(\xi_i\),容許這個點超出些界限,約束變成\(y_i(w\cdot x_i+b)>=1-\xi_i, i=1,2,...N\)。但是每個松弛因子的添加也不能不付出代價,所以最終的目標函數變成

\(min_{w,b}\frac{1}{2}||w||^2+C\sum_{i=1}^{N}\xi_i\)

s.t \(y_i(w\cdot x_i+b)>=1-\xi_i, i=1,2,...N\)

\(\xi_i>=0,i=1,2,3...N\)

目標函數的求解和2部分大同小異,這裏不再推導,具體可參見李航《統計學習方法》第7章。最終結果是:

\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)

\(b^*=y_i-\sum_{i=1}^N \alpha_i^* y_i (x_i \cdot x_j)\)

形式上看和2部分相同,但是\(y_i\)的條件不同,這裏不細述。

這裏給出KKT條件,這有利於我們對支持向量的分析。

(1)\(\triangledown_w L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=w^*-\sum_{i=1}^N \alpha_i^* y_i x_i=0\),得到\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)

(2)\(\triangledown_b L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=-\sum_{i=1}^N \alpha_i^*y_i=0\)

(3)\(\triangledown_\xi L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=C-\alpha^*-\nu^*=0\)

(4)\(a_i^*(y_i(w^* \cdot x_i+b^*)-1+\xi_i^*)=0\),i=1,2,3..N

(5)\nu_i^*\xi_i^*=0

(6)\(y_i(w^* \cdot x_i+b^*)-1+\xi_i^*\)>=0,i=1,2,..N

(7)\(a_i^*>=0\),i=1,2,...N

(8)\(\xi_i>=0\),i=1,2,...N

(9)\(\mu_i^*>=0\),i=1,2,...N

\(\alpha_i^*>0\)的樣本點的實例\(x_i\)稱作為支持向量,在2部分,只有間隔邊界上的點滿足\(\alpha_i^*>0\)。但是,當引入松弛變量時,情況變的復雜。

第一類點:間隔邊界裏面的點

這些點滿足 \(y_i(w^* \cdot x_i+b^*)>1 \),由(4)得\(\alpha_i^*=0\),由(2)得\(\mu_i^*=0\),又由(5)得\(\xi_i^*=0\),

第二類點:間隔邊界上的點

若\(0<\alpha_i^*<C\),則\(\xi_i^*=0\),支持向量落在間隔邊界上。由(3)(4)(5)容易推得。

第三類點:間隔邊界和分界線之間的點

若\(\alpha_i^*=C\),\(0<\xi_i^*<1\),則分類正確,\(x_i\)在間隔邊界和分界線之間。由(3)(4)容易推得。

第四類點:分錯的點

若\(\alpha_i^*=C\),\(\xi_i^*>1\),則樣本位於誤分一側。由(3)(4)容易推得。

參考下圖理解

技術分享

4,線性不可分的情況

現實中,很多情況下兩類樣本是線性不可分的。SVM的思路是進行空間映射,將樣本從不可分的空間映射到可分的空間。

從前兩部分推導出來分隔面可以看出,

\(f(x) = sign(\sum_{i=1}^N \alpha_i y_i (x_i \cdot x)+b^*)\)

新來的樣本只需與訓練樣本做點積即可得到label. 其實,樣本如何從A空間映射到B空間並不是很重要,只要能夠得到兩個樣本在新空間的點積就夠了。核函數正是利用這一思想。它省掉了映射這一步,這一步可以非常復雜,因此,核函數的應用提高了效率。

常用的核函數有:多項式核函數,高斯核函數,字符串核函數。

核函數理論很豐富,這裏不再詳述。

參考: 李航《統計學習方法》

SVM算法推導