支援向量機之鬆弛因子與線性支援向量機
一、線性支援向量機解決的問題
線性可分支援向量機只支援線性可分的訓練資料,通過硬間隔最大化實現分類資料;如果訓練資料不是線性可分的,我們就需要使用線性支援向量機的方法,去除其中的一些異常點,從而實現剩餘樣本點的線性可分;相應於硬間隔最大化,它稱為軟間隔最大化;
二、線性支援向量機的數學模型
為了彌補某些線性不可分樣本點的間隔不足的問題,我們為每個樣本點引入鬆弛變數 \(\xi_{i} \geq 0\),從而使得最終的間隔大於等於1
故得到如下約束條件
\[y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i} \]同時目標函式需要計算每個訓練樣本的鬆弛量,為了平衡函式間隔和誤分類樣本點的數量,引入取值為正的懲罰引數C;其值一般由應用問題決定,C值大時對誤分類的懲罰增大,C值小時對誤分類的懲罰減小;
線性不可分問題的線性支援向量機的學習問題變為如下的凸二次規劃問題;
\[\begin{array}{l} \min _{w, b, \xi} \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i}\\ s.t. \quad y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N \\ \xi_{i} \geqslant 0, \quad i=1,2, \cdots, N\\ \end{array} \]通過解決這個優化問題,可以得到超平面
分類決策函式
\[f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right) \]三、線性支援向量機的對偶演算法
模型的原始問題的拉格朗日函式為
\[L(w, b, \xi, \alpha, \mu) \equiv \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i}-\sum_{i=1}^{N} \alpha_{i}\left(y_{i}\left(w \cdot x_{i}+b\right)-1+\xi_{i}\right)-\sum_{i=1}^{N} \mu_{i} \xi_{i} \]對偶問題是拉格朗日函式的極大極小問題。我們首先求L(w,b,ξ,α,µ)對w,b,ξ的極小
通過計算得到
\[\begin{array}{l} w=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ C-\alpha_{i}-\mu_{i}=0 \end{array} \]將以上計算結果帶入拉格朗日函式
\[\min _{w, b, \xi} L(w, b, \xi, \alpha, \mu)=-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{N} \alpha_{i} \]接著求α的極大,即得對偶問題
\[\begin{array}{l} \max _{\alpha}-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{N} \alpha_{i}\\ s.t. \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ 0 \leqslant \alpha_{i} \leqslant C \end{array} \]可以通過求解對偶問題而得到原始問題的解,進而確定分離超平面和決策函式。
設有對偶問題的一個解
如果存在一個分量滿足以下條件
\[0<\alpha_{j}^{*} < C \]則可得原始問題的解(b*可能存在多個解)
\[\begin{aligned} w^{*} &=\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i} \\ b^{*} &=y_{j}-\sum_{i=1}^{N} y_{i} \alpha_{i}^{*}\left(x_{i} \cdot x_{j}\right) \end{aligned} \]最終可得超平面和分類決策函式為
\[\begin{array}{l} \sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}=0\\ f(x)=\operatorname{sign}\left(\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}\right) \end{array} \]四、鬆弛因子與支援向量
線性支援向量機模型得到的最優超平面如下圖所示,與線性可分支援向量機模型相比,線性支援向量機模型中支援向量分為3種
1)分佈在間隔邊界H1與H2上的樣本,此類樣本計算的距離得分值剛好等於1,即 \(y_{i}(w^{T}x_{i}+b)=1\),此時鬆弛因子 \(\xi_{i} = 0\),如樣本a、b、c;
2)分佈在間隔邊界H1與H2之間的樣本,如果在間隔內剛好落在分類超平面L上,則\(y_{i}(w^{T}x_{i}+b)=0\),此時的鬆弛因子\(\xi_{i} = 1\),如樣本f;而在間隔邊界與超平面L之間時,樣本的得分值在0與1之間,即\(0<y_{i}(w^{T}x_{i}+b)<1\),此時的鬆弛因子\(0<\xi_{i} < 1\),如樣本d;如果樣本進一步漂移,如樣本在超平面L的另一側,則樣本的得分值小於0,即\(-1<y_{i}(w^{T}x_{i}+b)<0\),此時的鬆弛因子\(1<\xi_{i} < 2\),如樣本e;
3)越過間隔邊界分佈在相反類別區域的樣本,則樣本的得分小於-1,即\(y_{i}(w^{T}x_{i}+b)<-1\),此時的鬆弛因子\(\xi_{i}>2\),如樣本h、g;
五、合頁損失函式,線性支援向量機的另一種解釋
支援向量機以函式間隔來衡量分類的準確性,自然也可以合頁損失函式來計算損失;當函式間隔大於1的時候,樣本分類正確,則損失為0,否則取函式值作為損失;
\[L(y(w\cdot x + b)) = [z]_{+}= [1-y(w\cdot x + b)]_{+} = \left\{\begin{array}{ll} z, & z>0 \\ 0, & z \leqslant 0 \end{array}\right. \]通過加入L2範數正則化得到目標函式為
\[\sum_{i=1}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2} \]合頁損失函式的圖形如下圖所示,橫軸是函式間隔y(w·x+b),縱軸是損失。由於函式形狀像一個合頁,故名合頁損失函式。
從圖中可以看到合頁函式是0-1損失函式的上界,它克服了0-1函式非連續可導導致的難以優化的問題;
圖中的虛線是感知機的的損失函式(公式如下), 當樣本點被正確分類的時候損失值為0,相比之下合頁函式不僅要分類正確,還需要足夠高的確信度時損失值才是0;
\[\left[-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+} \]
六、演算法示例
sklearn提供了LinearSVC類,我們可以通過引數指定C的值,以及使用損失函式;
from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
x, y = load_iris(return_X_y= True)
svc = Pipeline([
('scaler',StandardScaler()),
('linear_svc', LinearSVC(C=10, loss='hinge'))
])
svc = svc.fit(x, y)
print(svc.predict(x))
print(svc.score(x, y))
# [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
# 1 1 1 2 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
# 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2
# 2 2]
# 0.9466666666666667