1,SVM算法的思考出發點算法
SVM算法是一種經典的分類方法。對於線性可分問題,找到那個分界面就萬事大吉了。這個分界面能夠有不少,怎麼找呢?SVM是要找到最近點距離最遠的那個分界面。有點繞,看下面的圖就明白了函數
爲了推導簡單,咱們先假設樣本集是徹底線性可分的,也就一個分界面能達到100%的正確率。工具
2,線性可分的狀況學習
(1)優化目標的創建優化
最近點距離最遠的分界面,這句話得用數學式子表示出來,這樣才能用數學工具進行求解。3d
首先,假設分界面是y=wx+b,點\(x_i\)距離平面的距離用數學表達是\(\gamma_i=\frac{y_i(wx_i+b)}{||w||}\),這個是咱們在中學學過的點到平面的距離,咱們稱之爲幾何距離。由於點分佈在平面的兩側,因此這裏乘以了\(y_i\)。xml
「最近點」該如何表達呢?blog
\(\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空間並非很重要,只要可以獲得兩個樣本在新空間的點積就夠了。核函數正是利用這一思想。它省掉了映射這一步,這一步能夠很是複雜,所以,核函數的應用提升了效率。
經常使用的核函數有:多項式核函數,高斯核函數,字符串核函數。
核函數理論很豐富,這裏再也不詳述。
參考: 李航《統計學習方法》