一、支援向量機簡介
支援向量機(support vector machines,SVM)是一種二類分類模型。它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;支援向量機還包括核技巧,這使它成為實質上的非線性分類器。當訓練資料線性可分時,通過硬間隔最大化(hard margin maximization),學習一個線性的分類器,即線性可分支援向量機,又稱為硬間隔支援向量機;當訓練資料近似線性可分時,通過軟間隔最大化(soft margin maximization),也學習一個線性的分類器,即線性支援向量機,又稱為軟間隔支援向量機;當訓練資料線性不可分時,通過使用核技巧(kernel trick)及軟間隔最大化,學習非線性支援向量機。
二、函式間隔和集合間隔
支援向量機通過樣本距離超平面的距離來衡量預測的確定性或者準確性;例如下邊的圖中,A點預測的確信度相對B和C更大;
我們設最終確定的分離超平面為
\[wx+b = 0
\]
我們設 \(y = 1\) 表示正類, $ y = -1 $ 表示負類,相應的分類決策函式為
\[f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)
\]
則樣本點 $(x_{i}, y_{i}) $ 到分割超平面的距離稱為函式距離
\[\hat{\gamma}_{i}=y_{i}\left(w \cdot x_{i}+b\right)
\]
則訓練集關於超平面的函式間隔為所有樣本點中函式間隔最小的值
\[\hat{\gamma}=\min _{i=1, \cdots, N} \hat{\gamma}_{i}
\]
雖然函式間隔可以表徵分類預測的正確性和確認度,但是由於同一個超平面存在不同的引數組合,導致函式距離不唯一,所以我們需要對超平面的法向量進行歸一化,從而得到幾何間隔
\[\gamma_{i}=y_{i}\left(\frac{w}{\|w\|} \cdot x_{i}+\frac{b}{\|w\|}\right)
\]
同樣訓練集關於超平面的幾何間隔為所有樣本點中幾何間隔最小的值
\[\gamma=\min _{i=1, \cdots, N} \gamma_{i}
\]
三、幾何間隔最大化
對訓練資料集找到幾何間隔最大的超平面意味著以充分大的確信度對訓練資料進行分類。也就是說,不僅將正負例項點分開,而且對最難分的例項點(離超平面最近的點)也有足夠大的確信度將它們分開。這樣的超平面應該對未知的新例項有很好的分類預測能力。
幾何間隔最大化,即我們希望最大化超平面 $ (w, b) $ 關於訓練資料集的幾何間隔 $ \gamma $ ,約束條件表示的是超平面$ (w, b) \(關於每個訓練樣本點的幾何間隔至少是\) \gamma $
\[\begin{array}{ll}
\max _{w, b} & \gamma \\
\text { s.t. } & y_{i}\left(\frac{w}{\|w\|} \cdot x_{i}+\frac{b}{\|w\|}\right) \geqslant \gamma, \quad i=1,2, \cdots, N
\end{array}
\]
使用函式距離替換集合距離
\[\begin{array}{ll}
\max _{w, b} & \frac{\hat{\gamma}}{\|w\|} \\
\text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right) \geqslant \hat{\gamma}, \quad i=1,2, \cdots, N
\end{array}
\]
由於超平面的兩個引數可以成比例的隨意變化,導致函式距離可以取任何值,但是最終結果並不影響約束條件和目標函式,故我們直接取 \(\hat{\gamma} = 1\),同時將最大化改為最小化,則最優化問題變為
\[\begin{array}{ll}
\min _{w, b} & \frac{1}{2}\|w\|^{2} \\
\text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right)-1 \geqslant 0, \quad i=1,2, \cdots, N
\end{array}
\]
如果我們計算得到這個最優化問題的解 $ w*,b* $,那麼我們就得到了分離超平面和分類決策函式;
四、支援向量
線上性可分情況下,訓練資料集的樣本點中與分離超平面距離最近的樣本點的例項稱為支援向量(support vector)。在決定分離超平面時只有支援向量起作用,而其他例項點並不起作用。如果移動支援向量將改變所求的解;但是如果在間隔邊界以外移動其他例項點,甚至去掉這些點,則解是不會改變的。由於支援向量在確定分離超平面中起著決定性作用,所以將這種分類模型稱為支援向量機。支援向量的個數一般很少,所以支援向量機由很少的“重要的”訓練樣本確定。
五、通過對偶演算法求解最大化間隔
為了求解線性可分支援向量機的最優化問題,將它作為原始最優化問題,應用拉格朗日對偶性原始問題的最優解,這就是線性可分支援向量機的對偶演算法(dual algorithm)。
通過引入拉格朗日乘子構建拉格朗日函式
\[L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{N} \alpha_{i} y_{i}\left(w \cdot x_{i}+b\right)+\sum_{i=1}^{N} \alpha_{i}
\]
根據拉格朗日對偶性,原始問題的對偶問題是極大極小問題
\[\max _{\alpha} \min _{w, b} L(w, b, \alpha)
\]
分別對兩個引數計算偏導計算極小值
\[\begin{array}{l}
\nabla_{w} L(w, b, \alpha)=w-\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i}=0 \\
\nabla_{b} L(w, b, \alpha)=-\sum_{i=1}^{N} \alpha_{i} y_{i}=0
\end{array}
\]
計算得到
\[\begin{array}{l}
w=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\
\sum_{i=1}^{N} \alpha_{i} y_{i}=0
\end{array}
\]
將其帶入上邊構建的拉格朗日函式
\[\begin{aligned}
L(w, b, \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} y_{i}\left(\left(\sum_{j=1}^{N} \alpha_{j} y_{j} x_{j}\right) \cdot x_{i}+b\right)+\sum_{i=1}^{N} \alpha_{i} \\
&=-\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}
\end{aligned}
\]
接下來計算最大值部分
\[\begin{array}{ll}
\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} \\
\text { s.t. } & \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\
& \alpha_{i} \geqslant 0, \quad i=1,2, \cdots, N
\end{array}
\]
轉化為等效的計算極小問題
\[\begin{array}{ll}
\min _{\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} \\
\text { s.t. } \quad \sum_{i=1} \alpha_{i} y_{i}=0 \\
\alpha_{i} \geqslant 0, \quad i=1,2, \cdots, N
\end{array}
\]
對線性可分訓練資料集,假設對偶最優化問題對α的解為
\[\alpha^{*}=\left(\alpha_{1}^{*}, \alpha_{2}^{*}, \cdots, \alpha_{l}^{*}\right)^{\mathrm{T}}
\]
則存在下標j,使得 $ \alpha_{j}^{}>0 $ ,並可按下式求得原始最優化問題的解 $ w^{}, b^{*} $
\[\begin{array}{l}
w^{*}=\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i} \\
b^{*}=y_{j}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x_{i} \cdot x_{j}\right)
\end{array}
\]
由此可得分離超平面
\[\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)
\]
可以看到線性可分支援向量機的對偶形式只依賴於輸入x和訓練樣本輸入的內積。通過上邊$ w^{}, b^{} \(的表示式,可以看到兩個引數只依賴\) \alpha_{j}^{*}>0 $ 對應的訓練樣本點,這些樣本點就是支援向量;
六、演算法示例
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=float('inf'), 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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
# 1 1 1 1 1 1 1 1 1 2 1 1 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 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 2
# 2 2]
# 0.9866666666666667