支援向量機 ( support vector machine, SVM ) 是使用超平面來對給定的 p 維向量進行分類的非概率二元線性分類器。
一、超平面 ( hyperplane )
在一個p維的輸入空間,超平面就是 \(p-1\) 維的子空間。比如:在一個二維輸入的空間,超平面就是一維,也就是直線。用公式表示如下:
在一個三維的輸入空間,超平面就是二維,也就是一個平面,公式表示如下:
當輸入維度 \(p > 3\) 時,很難直觀地理解超平面,但是可以簡單地記為:超平面將輸入空間分為兩個部分,因此超平面最終的數學表示式為:
其中,\(\alpha_{i}\) 表示超平面的引數。因此,超平面將一個p維的空間分成兩個部分,考慮一個 \(p\) 維度的輸入例項 \(x = (x_{1}, x_{2},..., x_{p})\),當該例項在超平面上時,有:
當其不在超平面上時,必然會存在:
或者:
二、使用超平面進行二分類
考慮到一系列的輸入 \(x = (x_{1}, x_{2},...,x_{n})\),其中 \(x_{i} = (x_{i1}, x_{i2},...,x_{ip})^{T}\) ,那麼對應的標籤 應該屬於不同的類,這裡用\((1, -1)\) 來表示,即:\(y = (y_{1}, y_{2},...,y_{n}) \in (-1, 1)\)。因此我們需要根據這些觀測的訓練資料 \(T = ( (x_{1},y_{1}), (x_{2},y_{2}),...,(x_{n},y_{n})\) 來學習到SVM的引數 \((\alpha_{1}, \alpha_{2},...,\alpha_{p})\),使其能夠對任意給定的 \(p\) 維輸入 \(x_{n+1}\) 做出正確的判斷。在訓練過程中,假如在超平面一側的為 \(-1\),那麼在另外一側的就是 \(+1\),於是訓練的標準就可以表示為:
因此,最終的訓練標準可以統一為:
最終的超平面方程寫成矩陣形式為:\(f(x) = w^{T}x + b\)
但是從理論上來講通過旋轉,平移等操作,滿足這種條件的 SVM 分類器有無數個,如下圖左邊的部分所示,我們以二維輸入為例,把藍色的點看做同一類,而紅色的點看做第二類,黑色的線就是學到的分類器,那麼到底應該選哪一個呢?
第1個分類器太靠近藍色的和粉色的點,稍微有點擾動很有可能造成錯誤的分類,魯棒性較差
第2,3個分類器似乎看起來還可以,但是選取的標準又該怎麼定義呢?
一個很自然而然的想法就是選擇最大邊緣超平面\((maximal \quad margin \quad hyperplane)\)。即:我們可以計算 \(p\) 維空間上所有的點到該超平面的距離,另其最小的距離(\(margin\))最大。由於離超平面越近的點越容易分不清楚,最大化這些距離之後便能具有一定程度的魯棒性,這樣一來便能找到最優的超平面。因此通過這種策略,上圖的最優超平面可以描述為下圖:
從上圖中我們看到三個訓練觀測值與最大邊距超平面等距,並且沿著指示邊距寬度的虛線排列。因此這三個觀測值被稱為支援向量。有趣的是,最大邊緣超平面直接取決於支援向量,而不取決於其他觀測值,任何其他觀察的移動不會影響分離超平面,前提是觀察的移動不會導致它跨越 \(margin\)。
三、最大間隔閾值(\(maximum\quad margin\))表示
回憶高中數學的相關內容,對於平面 \(\Phi:Ax+By+Cz+D=0\),則其法向量為 \([A, B, C]\),空間內任意一點 \((x,y,z)\) 到該平面的距離為:
那麼同理,在 \(p\) 維空間內,\(p-1\) 維超平面表示為:\(\Phi: w^{T}x = 0\),則其法向量為 \(w^{T}\),空間內任意一點 \(x_{i}^{T} = (x_{i1},x_{i2},...,x_{ip})\) 到該超平面的距離為:
加入超平面能夠實現正確的分類,那麼設支援向量到超平面的距離為 \(\beta\),我們可以得到分類的值為:
即:\(w^{T}x > \beta\),通過觀察發現,縮放 \(w\) 的值並不會影響超平面的位置,因此不管 \(\beta\) 取任何值,最後都能通過 \(w'=w/\beta,\quad b'=b/\beta\) 將結果變為:\(w^{T}x+b > 1\),因此支援向量之間的距離就變成了: \(2/||w||\), 所以最後 SVM 的模型就變成了:
等價於:
即:將超平面左右平移1個單位得到超平面 \(\Phi_{1},\Phi_{2}\),找出所有為 +1 類的點全部落在 \(\Phi_{1}\) 左側,所有為 -1 類的點全部落在 \(\Phi_{2}\) 右側,並且同時滿足超平面的所有引數 \(w\) 的平方和最小的超平面。
四、對偶問題與KKT條件
求解帶約束的不等式,根據拉格朗日乘數法將式 \((13)\) 改寫成無約束不等式,得到:
於是我們對 \(L\) 求偏導:
將得到的 \(w = \sum_{i=1}^{m}\lambda_{i}y_{i}x_{i},\quad \sum_{i=1}^{m}\lambda_{i}y_{i} = 0\) 代入式 \((14)\) 得到:
即最後式子 \((14)\) 的對偶問題可以寫成:
最後通過求出 \(\lambda\) ,帶入到公式 \((15)\) 中就可以求出 \(w\) ,進而能求出 \(b\)。
在上述將原問題轉換為對偶問題的過程中,原問題需要滿足 \(KKT\) 條件,即:
這個條件不就是同濟第七版《高等數學》關於拉格朗日乘數法的應用前提嗎?有興趣的朋友可以自己查閱一下,畢竟已經不學數學好多年了,若有疏漏還請斧正。
這樣就出現一個非常有趣的現象,即:
若 \(\lambda_{i}=0\),則 \(y_{i}f(x_{i}) >= 1\)
若 \(\lambda_{i}>0\),則 \(y_{i}f(x_{i}) = 1\),所對應的樣本剛好落在最大邊界上 ( 即支援向量 ),因此訓練完成後大部分的訓練樣本都不需要保留,最終模型僅僅與支援向量有關。
上述主要分析了當訓練樣本是線性可分的情況下,SVM的一些理論與求解過程,即硬閾值的SVM。當訓練樣本不是線性可分的情況下需要設計軟閾值以及核函式的SVM,限於篇幅原因,將在後面的文章中進行闡述。