支援向量機 (三): 優化方法與支援向量迴歸
拉格朗日乘子法 - KKT條件 - 對偶問題
支援向量機 (一): 線性可分類 svm
支援向量機 (二): 軟間隔 svm 與 核函式
支援向量機 (三): 優化方法與支援向量迴歸
優化方法
一、SMO演算法
回顧 支援向量機 (二) 中 \((1.7)\) 式最後要求解的優化問題:
\[ \begin{align} \max_\alpha &\;\; \sum\limits_{i=1}^m \alpha_i - \frac12 \sum\limits_{i=1}^m\sum\limits_{i=1}^m \alpha_i\alpha_jy_iy_j\boldsymbol{x}_i^{\top}\boldsymbol{x}_j \tag{1.1}\\[1ex] \text{s.t.} & \;\; \sum\limits_{i=1}^m \alpha_iy_i = 0 \tag{1.2} \\[1ex] & \;\; 0 \leqslant \alpha_i \leqslant C, \quad i = 1,2,\ldots m \tag{1.3} \end{align} \]
在求出滿足條件的最優 \(\boldsymbol{\alpha}\) 後,即可得 svm 模型的引數 \((\boldsymbol{w}, b)\) ,進而獲得分離超平面。可以用通用的二次規劃演算法求解,該二次規劃問題有 \(m\) 個變數 ( \(m\) 為樣本數), \((m+1)\) 項約束,所以當樣本容量 \(m\) 很大時,問題變得不可解,而本節介紹的 SMO(sequential minimal optimization)演算法就是高效求解上述問題的演算法之一。
SMO 演算法將原來非常大的二次規劃問題分解成了一系列非常小的可解的二次規劃問題。SMO 演算法最誘人的地方在於,這些分解後小的二次規劃問題 ,都是擁有解析解的,也就是說,求解這些小的二次規劃優化問題不需要通過非常耗時的迴圈來得到問題的結果。由於不需要矩陣計算,使得 SMO 演算法 在實際的資料集的測試中,其計算複雜度介於線性複雜度和二次複雜度之間。SMO 演算法的計算複雜度和 svm 的模型也有關係,比如線性核 svm 計算速度較快。在實際測試中發現,如果訓練樣本是稀疏資料集,那麼SMO 演算法的效率會極其高。
SMO演算法的基本思路是:選擇兩個變數 \(\alpha_1\)和 \(\alpha_2\) ,固定其他所有 \(\alpha_i(i =3\ldots m)\),僅針對這兩個變數構建二次規劃問題,這樣就比原來複雜的優化問題簡化很多。由於有約束條件 \(\sum\limits_{i=1}^m \alpha_iy_i = 0\) ,固定了其他 \(\alpha_i(i =3\ldots m)\) 後,可得 \(\alpha_1 y_1 + \alpha_2 y_2 = - \sum\limits_{i=3}^m \alpha_iy_i\) 。所以 \(\alpha _1\) 確定後,\(\alpha _2\) 即可自動獲得,則該小型二次規劃問題中的兩個變數會同時更新,接著再不斷選取新的變數進行優化。
如何在每一步選擇合適的 \(\alpha\) 進行優化? SMO 採用啟發式的變數選擇方法:第 1 個變數 \(\alpha_1\) ,一般選擇訓練樣本中違反 KKT 條件最嚴重的樣本點所對應的 \(\alpha\) 。而第 2 個變數 \(\alpha_2\) 則選取與 \(\alpha_1\) 的樣本點之間間隔最大的樣本點對應的 \(\alpha\) ,這樣二者的更新往往會給目標函式帶來更大的變化。這裡的 KKT 條件具體指的是:
\[ \begin{aligned} \alpha_i=0 & \quad\Longleftrightarrow\quad y_if(\boldsymbol{x}_i) \ge 1\\ 0<\alpha_i<C & \quad\Longleftrightarrow\quad y_if(\boldsymbol{x}_i) = 1\\ \alpha_i=C & \quad\Longleftrightarrow\quad y_if(\boldsymbol{x}_i) \le 1 \end{aligned} \]
其中 \(f(\boldsymbol{x}_i) = \boldsymbol{w}^\top \boldsymbol{x}_i + b = \sum\limits_{j=1}^m \alpha_jy_j \boldsymbol{x}_i^\top \boldsymbol{x}_j + b\) 。還有一點就是,由於 KKT 條件過於地嚴格,比如 \(y_if(\boldsymbol{x}_i) = 1\) ,這個條件一般很難達到,所以在檢驗 KKT 條件的時候,都是在一定的誤差範圍 $\epsilon $ 內檢驗 KKT 條件的, 即 \(|y_if(\boldsymbol{x}_i) - 1| < \epsilon\) 。
在選擇了合適的變數後,下面來看如何解 \(\alpha_1\) 和 \(\alpha_2\):
若不考慮約束項 \((1.2)\) 和 \((1.3)\) ,由於固定了其他所有 \(\alpha_i(i =3\ldots m)\) ,因此設 \(\alpha_1 y_1 + \alpha_2 y_2 = - \sum\limits_{i=3}^m \alpha_iy_i = \zeta\) ,利用 \(y_i^2 = 1\) 兩邊同乘以 \(y_1\) ,則 \(\alpha_1 = (\zeta - \alpha_2 y_2) y_1\) ,代入 \((1.1)\) 式並求導即可得最優的 \(\alpha_2\) ,繼而利用上式求得 \(\alpha_1\) 。
然而由於約束項 \((1.3)\) 的存在,\(\alpha_1\) 和 \(\alpha_2\) 必須位於 \([0, C] \times [0, C]\) 圍成的矩形區域內; 且由於約束項 \((1.2)\) 的存在, \(\alpha_1 y_1 + \alpha_2 y_2 = - \sum\limits_{i=3}^m \alpha_iy_i = \zeta\) ,又由於 \(y_1\), \(y_2\) 只能取 \(+1\) 和 \(-1\) ,所以在第一種情況 —— \(y_1\) 和 \(y_2\) 異號時,\(\alpha_1\) 和 \(\alpha_2\) 位於直線 \(\alpha_1 - \alpha_2 = \zeta\) 上 (這裡取 \(y_1 = 1, \;y_2 = -1\) ,反過來情況類似),如下圖:
這裡採用迭代優化,假設上一輪迭代得到的最優解是 \(\alpha_1^{\,old}\) 和 \(\alpha_2^{\,old}\),本輪迭代完成後的解為 \(\alpha_1^{\,new}\) 和 \(\alpha_2^{\,new}\)。由於要滿足約束條件,\(\alpha_2^{\,new}\) 存在下界 \(L\) 和上界 \(H\) ,即: \(L \leqslant \alpha_2^{\,new} \leqslant H\) 。
假設要求 \(\alpha_2\) 的最小值,從圖中可以看到只有當 \(\alpha_1 = 0\) 時,\(\alpha_2\) 可以在矩形區域內的直線 \(\alpha_1 - \alpha_2 = \zeta\) 上取得最小值。此時 \(\alpha_2^{\,new} = -\zeta = \alpha_2^{\,old} - \alpha_1^{\,old}\) ( 後面一個等式是因為 \(\zeta\) 是常數 ) ,從圖中也顯示紅線和綠線與 \(y\) 軸都相交於 \((0, -\zeta)\) ,然而由於約束 \(0 \leqslant \alpha_2 \leqslant C\) 的存在,圖中綠線的下端點只能取到 \((\zeta, 0)\) ,所以綜合這兩種情況 \(\alpha_2\) 的下界 \(L = \max(0, \, -\zeta) = \max(0, \,\alpha_2^{\,old} - \alpha_1^{\,old})\) 。
同理要求 \(\alpha_2\) 的最大值,只有當 \(\alpha_1 = C\) 時,\(\alpha_2\) 可以在矩形區域內的直線 \(\alpha_1 - \alpha_2 = \zeta\) 上取得最大值。紅線和綠線與 \(y\) 軸都相交於 \((C, C-\zeta)\) ,然而由於約束 \(0 \leqslant \alpha_2 \leqslant C\) 的存在,圖中紅線的上端點只能取到 \((C + \zeta, C)\) ,所以綜合下來 \(\alpha_2\) 的上界 \(H = \min(C, \, C - \zeta) = \min(C, \, C + \alpha_2^{\,old} - \alpha_1^{\,old})\) 。
第二種情況 —— \(y_1\) 和 \(y_2\) 同號時,\(\alpha_1\) 和 \(\alpha_2\) 位於直線 \(\alpha_1 + \alpha_2 = \zeta\) 上 (這裡取 \(y_1 = 1, \;y_2 = 1\) ,反過來情況類似),如下圖:
假設要求 \(\alpha_2\) 的最小值,從圖中可以看到只有當 \(\alpha_1 = C\) 時,\(\alpha_2\) 可以在矩形區域內的直線 \(\alpha_1 + \alpha_2 = \zeta\) 上取得最小值。此時 \(\alpha_2^{\,new} = \zeta - C = \alpha_1^{\,old} + \alpha_2^{\,old} - C\) ,從圖中也顯示紅線和綠線與 \(y\) 軸都相交於 \((C, \zeta - C)\) ,然而由於約束 \(0 \leqslant \alpha_2 \leqslant C\) 的存在,圖中綠線的下端點只能取到 \((\zeta, 0)\) ,所以綜合這兩種情況 \(\alpha_2\) 的下界 \(L = \max(0, \, \zeta - C) = \max(0, \, \alpha_1^{\,old} + \alpha_2^{\,old} - C)\) 。
同理要求 \(\alpha_2\) 的最大值,只有當 $\alpha_1 = \(0 時,\)\alpha_2$ 可以在矩形區域內的直線 \(\alpha_1 + \alpha_2 = \zeta\) 上取得最大值。紅線和綠線與 \(y\) 軸都相交於 \((0, \zeta)\) ,然而由於約束 \(0 \leqslant \alpha_2 \leqslant C\) 的存在,圖中紅線的上端點只能取到 \((\zeta-C, \, C)\) ,所以綜合下來 \(\alpha_2\) 的上界 \(H = \min(C, \, \zeta) = \min(C, \, \alpha_1^{\,old} + \alpha_2^{\,old})\) 。
於是在 \(L \leqslant \alpha_2^{\,new} \leqslant H\) 的約束範圍內求得 \(\alpha_2^{\,new}\) 後,繼而從 \(\alpha_1 y_1 + \alpha_2 y_2 = - \sum\limits_{i=3}^m \alpha_iy_i = \zeta\) 中求得 \(\alpha_1^{\,new}\) ,這樣 \(\alpha_1\) 和 \(\alpha_2\) 就同時得到了更新。接下來不斷選擇變數進行優化,當所有 \(\alpha_i\) 都滿足 KKT 條件時,演算法終止,求得了最優的 \(\alpha_i , \;\; i = 1,2,\ldots m\) 。
二、Hinge Loss 梯度下降
svm 使用的損失函式為 hinge loss,即為:
\[
L(y,f(x)) = max(0,1-yf(x))
\]
\(\text{hinge loss}\) 使得 \(yf(x)>1\) 的樣本損失皆為 0,由此帶來了稀疏解,使得 svm 僅通過少量的支援向量就能確定最終超平面。下面來看 hinge loss 是如何推匯出來的,支援向量機 (二) 中 \((1.1)\) 式帶軟間隔的 svm 最後的優化問題為:
\[
\begin{align}
\min\limits_{\boldsymbol{w}, b,\boldsymbol{\xi}} & \;\; \frac12 ||\boldsymbol{w}||^2 + C \,\sum\limits_{i=1}^m \xi_i \tag{1.4}\\[1ex]
{\text { s.t. }} & \;\; y_{i}\left(\boldsymbol{w}^{\top} \boldsymbol{x}_{i}+b\right) \geq 1 - \xi_i, \quad i=1,2, \ldots, m \tag{1.5} \\[1ex]
& \;\; \xi_i \geq 0, \quad i=1,2, \ldots m \tag{1.6}
\end{align}
\]
\((1.5)\) 式重新整理為 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^\top\boldsymbol{x}_i + b)$ 。若 \(1 - y_i(\boldsymbol{w}^\top\boldsymbol{x}_i + b) < 0\) ,由於約束\((1.6)\) 的存在,則 \(\xi_i \geqslant 0\) ;若\(1 - y_i(\boldsymbol{w}^\top \boldsymbol{x}_i + b) \geqslant 0\) ,則依然為 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^\top \boldsymbol{x}_i + b)$ 。所以\((1.5),\,(1.6)\) 式結合起來:
\[
\xi_i \geqslant \max(0,\, 1 - y_i(\boldsymbol{w}^\top \boldsymbol{x}_i + b)) = \max(0,\, 1-y_if(x_i))
\]
又由於 \((1.4)\) 式是最小化問題,所以取 \(\xi_i\) 的極小值,即令 \(\xi_i = \max(0,1-yf(x))\) 代入 \((1.4)\) 式,並令\(\lambda = \frac{1}{2C}\) :
\[
\min \left(C\sum\limits_{i=1}^m \max(0,\, 1-y_if(x_i)) + \frac12 ||\boldsymbol{w}||^2\right) \quad {\large \propto} \quad
\min \left( \sum\limits_{i=1}^m \underbrace{\max(0,\, 1-y_if(x_i))}_{hinge \; loss} + \lambda ||\boldsymbol{w}||^2 \right)
\]
svm 中最常用的優化演算法自然是上文中的 SMO 演算法,不過有了損失函式後也可以直接優化。由於 hinge loss 在 \(y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) = 1\) 處不可導,因而無法直接使用梯度下降,不過可以通過求次梯度 (subgradient) 來進行優化:
\[ \begin{align*} \frac{\partial L}{\partial \boldsymbol w} &= \begin{cases} -y_i \cdot\boldsymbol x_i & \text{if} \;\; y_i(\boldsymbol{w}^\top\boldsymbol{x}_i + b) < 1 \\[1ex] 0 & \text{otherwise} \end{cases} \\[2ex] \frac{\partial{L}}{\partial b} &= \begin{cases} -y_i \quad & \quad\text{if} \;\; y_i(\boldsymbol{w}^\top\boldsymbol{x}_i + b) < 1 \\[1ex] 0 & \quad \text{otherwise} \end{cases} \\[2ex] \boldsymbol{w} &= \boldsymbol{w} - \eta \, \frac{\partial L}{\partial \boldsymbol{w}} \\ b &= b - \eta \, \frac{\partial L}{\partial b} \end{align*} \]
支援向量迴歸
前文主要敘述支援向量機用於分類問題,當然其也可用於迴歸問題。給定一組資料 \(\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, y_{m}\right)\right\}\) ,其中 \(\boldsymbol{x}_i \in \mathbb{R}^d\) ,\(y_i \in \mathbb{R}\) ,迴歸問題希望學得一個模型 \(f(\boldsymbol{x}) = \boldsymbol{w}^\top \boldsymbol{x} + b\) ,使得 \(f(\boldsymbol{x})\) 與 \(y\) 儘可能接近 。傳統的迴歸模型通常基於模型輸出 \(f(\boldsymbol{x})\) 與真實輸出 \(y\) 之間的差別來計算損失。當且僅當 \(f(\boldsymbol{x})\) 與 \(y\) 完全相同時,損失才為零。支援向量迴歸 ( Support Vector Regression,以下簡稱 \(\text{svr}\) ) 與之不同,它假設能容忍 \(f(\boldsymbol{x})\) 與 \(y\) 之間最多有 \(\epsilon\) 的偏差,即僅當 \(|f(\boldsymbol{x}) - y| > \epsilon\) 時,才計算損失。如下圖所示,\(\text{svr}\) 相當於以 \(f(\boldsymbol{x})\) 為中心,構建了一個寬度為 \(\epsilon\) 的間隔帶。若訓練樣本落在此間隔帶內則被認為是預測正確的。
\(\text{svr}\) 的損失函式由此被稱為 \(\epsilon - \text{insensitive error}\) ,形如 :
\[
L(y,f(x)) =
\begin{cases}
0 \;\;& \text{if}\;\; |y - f(x)| \leq \epsilon\\
|y - f(x)| - \epsilon \;\; & \text{otherwise}
\end{cases} \tag{2.1}
\]
本質上我們希望所有的模型輸出 \(f(x)\) 都在 \(\epsilon\) 的間隔帶內,因而與 支援向量機 (一) 中的 \((1.3)\) 式一樣,我們可以定義 \(\text{svr}\) 的優化目標:
\[
\begin{aligned}
& \min\limits_{\boldsymbol{w}, b}\frac12 ||\boldsymbol{w}||^2 \\[1ex]
& {\text { s.t. }} \;\; |y_{i} - \boldsymbol{w}^{\top} \boldsymbol{x}_{i} - b| \leq \epsilon , \quad i=1,2, \ldots, m
\end{aligned} \tag{2.2}
\]
同樣類似於 支援向量機 (二) 中的 \((1.1)\) 式,可以為每個樣本點引入鬆弛變數 \(\xi > 0\),即允許一部分樣本落到間隔帶外,使得模型更加 robust 。由於這裡用的是絕對值,實際上是兩個不等式,也就是說兩邊都需要鬆弛變數,我們定義為 \(\xi_i^{\lor}, \xi_i^{\land}\) ,於是優化目標變為:
\[
\begin{align*}
\min\limits_{\boldsymbol{w}, b,\boldsymbol{\xi^\lor},\boldsymbol{\xi^\land}}\;\; &\frac{1}{2}||\boldsymbol{w}||^2 + C\sum\limits_{i=1}^{m}(\xi_i^{\lor}+ \xi_i^{\land}) \\[1ex]
\text{s.t.} \;\; &-\epsilon - \xi_i^{\lor} \leq y_i - \boldsymbol{w}^\top \boldsymbol{x}_i -b \leq \epsilon + \xi_i^{\land} \\[1ex]
& \xi_i^{\lor} \geq 0, \; \xi_i^{\land} \geq 0\quad i=1,2, \ldots, m
\end{align*} \tag{2.3}
\]
上式中的 \(C\) 和 \(\epsilon\) 分別對應 scikit-learn 的 SVR 中的引數 \(C\) 和 \(\text{epsilon}\) ,\(C\) 越大,意味著對離群點的懲罰就越大,最終就會有較少的點跨過間隔邊界,模型也會變得複雜。而 \(C\) 設的越小,則較多的點會跨過間隔邊界,最終形成的模型較為平滑。而 \(\text{epsilon}\) 越大,則對離群點容忍度越高,最終的模型也會較為平滑,這個引數是 \(\text{svr}\) 問題中獨有的,svm 中沒有這個引數。
對於 \((2.3)\) 式,為每條約束引入拉格朗日乘子 \(\mu_i^{\lor} \geqslant 0, \, \mu_i^{\land} \geqslant 0,\, \alpha_i^{\lor} \geqslant 0, \,\alpha_i^{\land} \geqslant 0\) :
\[
\begin{align*}
L(\boldsymbol{w},b,\boldsymbol{\alpha^{\lor}}, \boldsymbol{\alpha^{\land}}, \boldsymbol{\xi^{\lor}}, \boldsymbol{\xi}^{\land}, \boldsymbol{\mu}^{\lor}, \boldsymbol{\mu}^{\land}) = &\frac{1}{2}||\boldsymbol{w}||^2 + C\sum\limits_{i=1}^{m}(\xi_i^{\lor}+ \xi_i^{\land}) + \\
&\sum\limits_{i=1}^{m}\alpha_i^{\lor}(-\epsilon - \xi_i^{\lor} -y_i + \boldsymbol{w}^\top \boldsymbol{x}_i + b) + \\ & \sum\limits_{i=1}^{m}\alpha_i^{\land}(y_i - \boldsymbol{w}^\top \boldsymbol{x}_i - b -\epsilon - \xi_i^{\land}) - \\ & \sum\limits_{i=1}^{m}\mu_i^{\lor}\xi_i^{\lor} - \sum\limits_{i=1}^{m}\mu_i^{\land}\xi_i^{\land}
\end{align*} \tag{2.4}
\]
其對偶問題為:
\[
\begin{aligned}
\max_{\boldsymbol{\alpha}, \boldsymbol{\mu}}\min_{\boldsymbol{w},b,\boldsymbol{\xi}} &\;\; L(\boldsymbol{w},b,\boldsymbol{\alpha^{\lor}}, \boldsymbol{\alpha^{\land}}, \boldsymbol{\xi^{\lor}}, \boldsymbol{\xi}^{\land}, \boldsymbol{\mu}^{\lor}, \boldsymbol{\mu}^{\land}) \\[1ex]
\text{s.t.} &\;\; \alpha_i^{\lor}, \, \alpha_i^{\land} \geq 0, \quad i=1,2, \ldots m \\[1ex]
& \;\;\mu_i^{\lor},\, \mu_i^{\land} \geq 0, \quad i = 1,2, \ldots m
\end{aligned} \tag{2.5}
\]
上式對 \(\boldsymbol{w}, b, \xi_i^\lor, \xi_i^\land\) 求偏導為零可得:
\[
\begin{align}
\frac{\partial L}{\partial \boldsymbol{w}} = \boldsymbol{0} & \implies \boldsymbol{w} = \sum\limits_{i=1}^m (\alpha_i^\land - \alpha_i^\lor) \boldsymbol{x}_i \qquad\qquad \tag{2.6} \\
\frac{\partial L}{\partial b} = 0 & \implies \sum\limits_{i=1}^m (\alpha_i^\land - \alpha_i^\lor) = 0 \qquad\qquad\quad\; \tag{2.7} \\
\frac{\partial L}{\partial \boldsymbol{\xi}^\lor} = 0 & \implies C - \alpha_i^\lor - \mu_i^\lor = 0 \qquad\qquad\quad\; \tag{2.8} \\
\frac{\partial L}{\partial \boldsymbol{\xi}^\land} = 0 & \implies C - \alpha_i^\land - \mu_i^\land = 0 \qquad\qquad\quad\; \tag{2.9}
\end{align}
\]
將 \((2.6) \sim (2.9)\) 式代入 \((2.4)\) 式,並考慮由\((2.8), \,(2.9)\) 式得 \(C - \alpha_i = u_i \geqslant 0\) ,因而 \(0 \leqslant \alpha_i \leqslant C\) 得化簡後的優化問題:
\[
\begin{aligned}
\max_{\boldsymbol{\alpha}^\lor, \boldsymbol{\alpha}^\land} &\;\; \sum\limits_{i=1}^m y_i(\alpha_i^\land - \alpha_i^\lor) - \epsilon(\alpha_i^\land + \alpha_i^\land) - \frac12 \sum\limits_{i=1}^m\sum\limits_{j=1}^m (\alpha_i^\land - \alpha_i^\lor)(\alpha_j^\land - \alpha_j^\lor)\boldsymbol{x}_i^{\top}\boldsymbol{x}_j \\[1ex]
\text{s.t.} & \;\; \sum\limits_{i=1}^m (\alpha_i^\land - \alpha_i^\lor) = 0 \\[1ex]
& \;\; 0 \leqslant \alpha_i^\lor, \alpha_i^\land \leqslant C, \quad i = 1,2,\ldots m
\end{aligned} \tag{2.10}
\]
上述求最優解的過程需滿足 \(\mathbb{KKT}\) 條件,其中的互補鬆弛條件為 :
\[
\begin{cases}
\alpha_i^{\lor}(\epsilon + \xi_i^{\lor} + y_i - \boldsymbol{w}^\top \boldsymbol{x}_i - b ) = 0 \qquad\qquad\qquad\qquad\qquad (2.11) \\[2ex]
\alpha_i^{\land}(\epsilon + \xi_i^{\land} - y_i + \boldsymbol{w}^\top \boldsymbol{x}_i + b ) = 0 \qquad\qquad\qquad\qquad\qquad (2.12) \\[2ex]
\mu^\lor_i \xi^\lor_i = (C - \alpha^\lor_i)\xi^\lor_i = 0 \qquad\qquad\qquad\qquad\qquad\qquad\quad\;\; (2.13) \\[2ex]
\mu^\land_i \xi^\lor_i = (C - \alpha^\land_i)\xi^\land_i = 0 \qquad\qquad\qquad\qquad\qquad\qquad\quad\;\; (2.14)
\end{cases}
\]
若樣本在間隔帶內,則 \(\xi_i = 0\) , \(| y_i - \boldsymbol{w}^\top \boldsymbol{x} - b| < \epsilon\) ,於是要讓互補鬆弛成立,只有使 \(\alpha_i^{\lor} = 0, \,\alpha_i^{\land} = 0\) ,則由 \((2.6)\) 式得 \(\boldsymbol{w} = 0\) ,說明在間隔帶內的樣本都不是支援向量,而對於間隔帶上或間隔帶外的樣本,相應的 \(\alpha_i^\lor\) 或 \(\alpha_i^\land\) 才能取非零值。此外一個樣本不可能同時位於 \(f(\boldsymbol{x})\) 的上方和下方,所以 \((2.11)\) 和 \((2.12)\) 式不能同時成立,因此 \(\alpha_i^{\lor}\) 和 \(\alpha_i^\land\) 中至少一個為零。
優化問題 \((2.10)\) 同樣可以使用二次規劃或 SMO 演算法求出 \(\boldsymbol{\alpha}\) ,繼而根據 \((2.6)\) 式求得模型引數 \(\boldsymbol{w} = \sum_{i=1}^m (\alpha_i^\land - \alpha_i^\lor) \boldsymbol{x}_i\) 。而對於模型引數 \(b\) 來說,對於任意滿足 \(0 < \alpha_i < C\) 的樣本,由 \((2.13)\) 和 \((2.14)\) 式可得 \(\xi _i= 0\) ,進而根據 \((2.11)\) 和 \((2.12)\) 式:
\[
b = \epsilon + y_i - \boldsymbol{w}^\top\boldsymbol{x}_i = \epsilon + y_i - \sum\limits_{j=1}^m (\alpha_j^\land - \alpha_j^\lor) \boldsymbol{x}_j^\top \boldsymbol{x}_i
\]
則 \(\text{svr}\) 最後的模型為:
\[
f(\boldsymbol{x}) = \boldsymbol{w}^\top \boldsymbol{x} + b = \sum\limits_{i=1}^m (\alpha_i^\land - \alpha_i^\lor) \boldsymbol{x}_i^\top \boldsymbol{x} + b
\]
支援向量機演算法總結
支援向量機的優點:
- 解決高維特徵的分類問題和迴歸問題很有效,在特徵維度大於樣本數時依然有很好的效果。
- 僅僅使用一部分樣本決定超平面,記憶體佔用少。
- 有大量的核函式可以使用,從而可以很靈活的來解決各種非線性的分類迴歸問題。
支援向量機的缺點:
- 當採用核函式時,如果需要儲存核矩陣,則空間複雜度為 \(\mathcal{O}(m^2)\) 。
- 選擇核函式沒有通用的標準 (當然其實是有的,見下文~) 。
- 樣本量很大時,計算複雜度高。
對於第 3 個缺點,scikit-learn 的 SVC 文件中有一句話:
The fit time scales at least quadratically with the number of samples and may be impractical beyond tens of thousands of samples.
我特意去查了下字典,”tens of thousands“ 意為 ”好幾萬“,也就是說對於幾萬的資料 svm 處理起來就已經很捉急了,至於百萬到億級的資料基本就不用想了,這在如今這個大資料時代確實不夠看,不過這裡說的是使用核函式的 svm。而對於線性 svm 來說,情況要好很多,一般為 \(\mathcal{O}(m)\)。
LibSVM 的作者,國立臺灣大學的林智仁教授在其一篇小文(A Practical Guide to Support Vector Classification)中提出了 svm 庫的一般使用流程 :
其中第二步 scaling 對於 svm 的整體效果有重大影響。主要原因為在沒有進行 scaling 的情況下,數值範圍大的特徵會產生較大的影響,進而影響模型效果。
第三步中認為應優先試驗 RBF 核,通常效果比較好。但他同時也提到,RBF 核並不是萬能的,在一些情況下線性核更加適用。當特徵數非常多,或者樣本數遠小於特徵數時,使用線性核已然足夠,對映到高維空間作用不大,而且只要對 C 進行調參即可。雖然理論上高斯核的效果不會差於線性核,但高斯核需要更多輪的調參。
下表總結了 scikit-learn 中的 svm 分類庫:
scikit-learn 中 svm 庫的兩個主要超引數為 \(C\) 和 \(\gamma\) ,\(C\) 和 \(\gamma\) 越大,則模型趨於複雜,容易過擬合;反之,\(C\) 和 \(\gamma\) 越大,模型變得簡單,如下圖所示: