SVM算法推導
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算法推導