支持向量機模型(SVM)是一個二分類模型,基本思想是求解能夠正確划分訓練數據集並且幾何間隔最大的分離超平面,其學習策略便是間隔最大化,最終化為一個凸二次規划問題的求解。
SVM可分為線性可分支持向量機、線性支持向量機和非線性支持向量機。
算法推導
1. 線性可分支持向量機
- 引入函數間隔和幾何間隔
線性向量機的基本思想是硬間隔最大化,即:
即:
取\(ŷ=1\),得
這是一個凸二次規划問題,通過引入拉格朗日乘子法,構建拉格朗日對偶函數,通過求其對偶函數的解,從而得到原始問題的最優解。
- 定義拉格朗日函數:
其中,\(α={(α_1,α_2,…,α_N)}^T\)為拉格朗日乘子向量,\(α_i≥0,i=1,2,…,N\)
原始問題的對偶問題是極大極小問題:
-
求解對偶問題
- 求\(\min_{w,b} L(w,b,α)\)
分別對w,b求偏導數並令其為0:
\[\begin{aligned} \nabla_w L(w,b,α)=w-\sum_{i=1}^N{α_i y_i x_i}=0 \\ \nabla_b L(w,b,α)=\sum_{i=1}^N{α_i y_i}=0 \end{aligned} \]得
\[\begin{aligned} w=\sum_{i=1}^N{α_i y_i x_i} \\ \sum_{i=1}^N{α_i y_i}=0 \end{aligned} \]代入拉格朗日函數,得
\[L(w,b,α)= \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N α_i α_j y_i y_j (x_i·x_j+b)-\sum_{i=1}^N{α_i y_i ((\sum_{j=1}^N{α_j y_j x_j})·x_i+b)}+\sum_{i=1}^Nα_i \]\[= -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N α_i α_j y_i y_j (x_i·x_j)+\sum_{i=1}^Nα_i \]即
\[\min_{w,b} L(w,b,α) = -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N α_i α_j y_i y_j (x_i·x_j)+\sum_{i=1}^Nα_i \]- 求\(\min_{w,b} L(w,b,α)\)對\(α\)的極大:
\[\max_{α}\ \ \ -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N α_i α_j y_i y_j (x_i·x_j)+\sum_{i=1}^Nα_i \]\[s.t.\ \ \ \sum_{i=1}^N{α_i y_i}=0 \]\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ α_i≥0,i=1,2,…,N \]即:
\[\min_{α}\ \ \ \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N α_i α_j y_i y_j (x_i·x_j)-\sum_{i=1}^Nα_i \]\[s.t.\ \ \ \sum_{i=1}^N{α_i y_i}=0 \]\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ α_i≥0,i=1,2,…,N \]求得最優解1
\[\alpha^x={({\alpha_1}^x,{\alpha_2}^x,…,{\alpha_N}^x)}^{T} \]計算
\[w^*=\sum_{i=1}^N {α_i}^x y_i x_i \]並選擇\(α^x\)的一個正分量\({α_j}^x>0\),計算
\[b^x=y_i-\sum_{i=1}^N {α_i}^x y_i (x_i·x_j) \]求得分類決策函數:
\[f(x)=sign(w^x·x+b^x) \]可知\(w^x\),\(b^x\)只依賴訓練數據中對應於\({α_i}^x>0\)的樣本點\((x_i,y_i)\),而其他樣本點對\(w^x\),\(b^x\)沒有影響。將訓練樣本中對應於\({α_i}^x>0\)的實例點稱為支持向量。
2. 線性支持向量機
對於線性不可分訓練集,引入松弛變量,采用軟間隔最大化策略
- 其原始問題為:
構建拉格朗日函數:
求導后代入,得
得其對偶問題:
可以看做最小化以下目標函數:
\[\sum_{i=1}^N[1-y_i (w·x_i+b)]_++λ||w||^2 \]目標函數第一項是經驗風險,稱為合頁損失函數(hinge loss function)
3. 非線性支持向量機
核函數:我們可以使用核函數,將原始輸入空間映射到新的樣本空間,從而使原來線性不可分得變成高維的線性可分。
在線性支持向量機的對偶問題中,無論是目標函數還是決策函數都只涉及輸入實例與實例之間的內積。在對偶問題的目標函數中內積可以用核函數來代替,此時對偶問題的目標函數成為:
同樣,分類決策函數中的內積也可以用核函數代替,而分類決策函數成為:
SMO
SMO是用於快速求解SVM的
它選擇凸二次規划的兩個變量,其他的變量保持不變,然后根據這兩個變量構建一個二次規划問題,這個二次規划關於這兩個變量解會更加的接近原始二次規划的解,通過這樣的子問題划分可以大大增加整個算法的計算速度,關於這兩個變量:
- 其中一個是嚴重違反KKT條件的一個變量
- 另一個變量是根據自由約束確定,求剩余變量的最大化來確定的。
相關問題
SVM如何解決多分類問題?
- 直接法
直接在目標函數上進行修改,將多個分類面的參數求解合並到一個最優化問題中,通過求解該優化就可以實現多分類(計算復雜度很高,實現起來較為困難) - 間接法
1) 一對多
其中某個類為一類,其余n-1個類為另一個類,比如A,B,C,D四個類,第一次A為一個類,{B,C,D}為一個類訓練一個分類器,第二次B為一個類,{A,C,D}為另一個類,按這方式共需要訓練4個分類器,最后在測試的時候將測試樣本經過這4個分類器\(f1(x)\),\(f2(x)\),\(f3(x)\)和\(f4(x)\),取其最大值為分類器(這種方式由於是1對M分類,會存在偏置,很不實用)
2) 一對一(libsvm實現的方式)
任意兩個類都訓練一個分類器,那么n個類就需要n_(n-1)/2個svm分類器。
還是以A,B,C,D為例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}為目標共6個分類器,然后在預測的將測試樣本通過這6個分類器之后進行投票選擇最終結果。(這種方法雖好,但是需要\(n_(n-1)/2\)個分類器代價太大,不過 可以使用循環圖來進行改進)
KKT條件及其物理意義
KKT條件可以總結成:約束條件(原始約束和引入拉格朗日乘子后的約束)、對x偏導為0、對偶互補條件
針對問題:
對於這個問題先不看等式約束,畫出不等式約束和目標函數關系圖:
其中,陰影部分就是可行域,也就是說可行域從原來的一條線變成了一塊區域。那么能取到極值點的地方可能有兩種情況:
1、還是在 \(h(x)\)和等值線相切的地方
2、\(f(x)\)的極值點本身就在可行域里面。
因為如果不是相切,那么,對任意一個在可行域中的點,如果在它附近往里走或者往外走,\(f(x)\)一般都會變大或者變小,所以絕大部分點都不會是極值點。除非這個點剛好在交界處,且和等值線相切;或者這個點在可行域內部,但是本身就是\(f(x)\)的極值點。
對於第一種情況,不等式約束就變成等式約束了,定義拉格朗日函數:
使用拉格朗日乘子法:
這里需要解釋一下,為什么是\(μ≥0\)。在“不等式約束”圖中,問題的可行域是在$ g(x)≤0\(一側,而\)g(x)$ 的梯度是指向大於 0 的一側,也就是不是可行域的一側。而求的問題是極小值,所以 \(f(x)\) 在交點處的梯度是指向可行域的一側,也就是說兩個梯度一定是相反的。所以也就可以確定這里的系數一定是大於等於0的。而等式約束由於不知道\(h(x)\) 的梯度方向,所以對它沒有約束。
對於第二種情況,不等式約束就相當於沒有,定義拉格朗日函數
使用拉格朗日乘子法:
不同的是第一種情況有\(g(x)=0\)且\(μ≥0\),第二種情況\(g(x)≤0\)且\(μ=0\),綜合兩個問題可得:
這個就是 KKT 條件。它的含義是這個優化問題的極值點一定滿足這組方程組。(不是極值點也可能會滿足,但是不會存在某個極值點不滿足的情況)它也是原來的優化問題取得極值的必要條件。
LR與SVM的區別和聯系
相同點:
1、都是有監督的分類算法;
2、如果不考慮核函數,LR和SVM都是線性分類算法。它們的分類決策面都是線性的。
3、LR和SVM都是判別式模型。
不同點:
1、本質上是loss函數不同,或者說分類的原理不同。LR模型找到的那個超平面,是盡量讓所有點都遠離他,而SVM尋找的那個超平面,是只讓最靠近中間分割線的那些點盡量遠離,即只用到那些支持向量的樣本。SVM只考慮分界面附近的少數點,而LR則考慮所有點。
2、SVM是結構風險最小化,LR則是經驗風險最小化。
結構風險最小化就是在訓練誤差和模型復雜度之間尋求平衡,防止過擬合,減小泛化誤差。為了達到結構風險最小化的目的,最常用的方法就是添加正則項。SVM的loss函數具有L2正則項;LR需要加入正則化項。
3、SVM不能產生概率,LR可以產生概率。
4、在解決非線性問題時,SVM可采用核函數的機制,而LR通常不采用核函數的方法。
5、SVM計算復雜,但效果比LR好,適合小數據集;LR計算簡單,適合大數據集,可以在線訓練。