今天是機器學習專題的第34篇文章,我們繼續來聊聊SVM模型。
我們在上一篇文章當中推導了SVM模型在硬間隔的原理以及公式,最后我們消去了所有的變量,只剩下了\(\alpha\)。在硬間隔模型當中,樣本是線性可分的,也就是說-1和1的類別可以找到一個平面將它完美分開。但是在實際當中,這樣的情況幾乎是不存在的。道理也很簡單,完美是不存在的,總有些樣本會出錯。
那針對這樣的問題我們應該怎么解決呢?
軟間隔
在上文當中我們說了,在實際的場景當中,數據不可能是百分百線性可分的,即使真的能硬生生地找到這樣的一個分隔平面區分開樣本,那么也很有可能陷入過擬合當中,也是不值得追求的。
因此,我們需要對分類器的標准稍稍放松,允許部分樣本出錯。但是這就帶來了一個問題,在硬間隔的場景當中,間隔就等於距離分隔平面最近的支持向量到分隔平面的距離。那么,在允許出錯的情況下,這個間隔又該怎么算呢?
為了解決這個問題,我們需要對原本的公式進行變形,引入一個新的變量叫做松弛變量。松弛變量我們用希臘字母\(\xi\)來表示,這個松弛變量允許我們適當放松$y_i(\omega^T x_i + b) \ge 1 \(這個限制條件,我們將它變成\)y_i(\omega^T x_i + b) \ge 1-\xi_i $。
也就是說對於每一條樣本我們都會有一個對應的松弛變量\(\xi_i\),它一共有幾種情況。
- \(\xi=0\),表示樣本能夠正確分類
- \(0 < \xi < 1\),表示樣本在分割平面和支持向量之間
- \(\xi = 1\),表示樣本在分割平面上
- \(\xi \ge 1\),表示樣本異常
我們可以結合下面這張圖來理解一下,會容易一些:
松弛變量雖然可以讓我們表示那些被錯誤分類的樣本,但是我們當然不希望它隨意松弛,這樣模型的效果就不能保證了。所以我們把它加入損失函數當中,希望在松弛得盡量少的前提下保證模型盡可能划分正確。這樣我們可以重寫模型的學習條件:
這里的C是一個常數,可以理解成懲罰參數。我們希望\(||\omega||^2\)盡量小,也希望\(\sum \xi_i\)盡量小,這個參數C就是用來協調兩者的。C越大代表我們對模型的分類要求越嚴格,越不希望出現錯誤分類的情況,C越小代表我們對松弛變量的要求越低。
從形式上來看模型的學習目標函數和之前的硬間隔差別並不大,只是多了一個變量而已。這也是我們希望的,在改動盡量小的前提下讓模型支持分隔錯誤的情況。
模型推導
對於上面的式子我們同樣使用拉格朗日公式進行化簡,將它轉化成沒有約束的問題。
首先,我們確定幾個值。第一個是我們要優化的目標:\(f(x)=\min_{\omega, b, \xi}\frac{1}{2}||\omega||^2 + C\sum_{i=1}^m \xi_i\)
第二個是不等式約束,拉格朗日乘子法當中限定不等式必須都是小於等於0的形式,所以我們要將原式中的式子做一個簡單的轉化:
最后是引入拉格朗日乘子: \(\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_m), \beta = (\beta_1, \beta_2, \cdots, \beta_m)\)
我們寫出廣義拉格朗日函數:\(L(\omega, b, \xi, \alpha, \beta) = \frac{1}{2}||\omega||^2 + C\sum_{i=1}^m \xi_i, + \sum_{i=1}^m \alpha_i(1 - \xi_i - y_i(\omega^Tx_i + b)) -\sum_{i=1}^m \beta_i\xi_i\)
我們要求的是這個函數的最值,也就是\(\min_{\omega, b, \xi}\max_{\alpha \ge 0, \beta\ge 0}L(\omega, b, \xi, \alpha, \beta)\)。
在處理硬間隔的時候,我們講過對偶問題,對於軟間隔也是一樣。我們求L函數的對偶函數的極值。
對偶問題
原函數的對偶問題是\(\max_{\alpha \ge0, \beta \ge 0}\min_{\omega, b, \xi}L(\omega, b, \xi, \alpha, \beta)\),這個對偶問題要成立需要滿足KKT條件。
我們先把這個KKT條件放一放,先來看一下對偶問題當中的內部的極小值。這個極小值沒有任何約束條件,所以我們可以放心大膽地通過求導來來計算極值。這個同樣是高中數學的內容,我們分別計算\(\frac{\partial L}{\partial \omega}\),\(\frac{\partial L}{\partial b}\)和\(\frac{\partial L}{\partial \xi}\)。
求導之后,我們可以得到:
我們把這三個式子帶入對偶函數可以得到:
由於\(\beta_i \ge 0\),所以我們可以得到\(0 \le \alpha_i \le C\),所以最后我們可以把式子化簡成:
將原始化簡了之后,我們再回過頭來看KKT條件。KKT條件單獨理解看起來有點亂,其實我們可以分成三個部分,分別是原始問題可行:
對偶問題可行:
以及松弛可行:
我們觀察一下倒數第二個條件:\(\alpha_i (1 - \xi - y_i(\omega^Tx_i + b)) = 0\)。
這是兩個式子相乘並且等於0,無非兩種情況,要么\(\alpha_i = 0\),要么后面那串等於0。我們分情況討論。
- 如果\(\alpha_i = 0\),那么\(y_i(\omega^Tx_i + b) - 1 \ge 0\),樣本分類正確,不會對模型產生影響。
- 如果\(\alpha_i > 0\),那么\(y_i(\omega^Tx_i + b) = 1 - \xi_i\),則樣本是支持向量。由於\(C = \alpha_i + \beta_i\) ,並且\(\beta_i \xi_i= 0\)。我們又可以分情況:
- \(\alpha_i < C\),那么\(\beta_i > 0\),所以\(\xi_i = 0\),那么樣本在邊界上
- 如果\(\alpha_i = C\),那么\(\beta_i = 0\),如果此時\(\xi \le 1\),那么樣本被正確分類,否則樣本被錯誤分類
經過了化簡之后,式子當中只剩下了變量\(\alpha\),我們要做的就是找到滿足約束條件並且使得式子取極值時的\(\alpha\),這個\(\alpha\)要怎么求呢?我們這里先放一放,將在下一篇文章當中詳解講解。
今天的文章到這里就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點贊)。