在前四篇里面我們講到了SVM的線性分類和非線性分類,以及在分類時用到的算法。這些都關注與SVM的分類問題。實際上SVM也可以用於回歸模型,本篇就對如何將SVM用於回歸模型做一個總結。重點關注SVM分類和SVM回歸的相同點與不同點。
1. SVM回歸模型的損失函數度量
回顧下我們前面SVM分類模型中,我們的目標函數是讓12||w||2212||w||22最小,同時讓各個訓練集中的點盡量遠離自己類別一邊的的支持向量,即yi(w∙ϕ(xi)+b)≥1yi(w∙ϕ(xi)+b)≥1。如果是加入一個松弛變量ξi≥0ξi≥0,則目標函數是12||w||22+C∑i=1mξi12||w||22+C∑i=1mξi,對應的約束條件變成:yi(w∙ϕ(xi)+b)≥1−ξiyi(w∙ϕ(xi)+b)≥1−ξi
但是我們現在是回歸模型,優化目標函數可以繼續和SVM分類模型保持一致為12||w||2212||w||22,但是約束條件呢?不可能是讓各個訓練集中的點盡量遠離自己類別一邊的的支持向量,因為我們是回歸模型,沒有類別。對於回歸模型,我們的目標是讓訓練集中的每個點(xi,yi)(xi,yi),盡量擬合到一個線性模型yi =w∙ϕ(xi)+byi =w∙ϕ(xi)+b。對於一般的回歸模型,我們是用均方差作為損失函數,但是SVM不是這樣定義損失函數的。
SVM需要我們定義一個常量ϵ>0ϵ>0,對於某一個點(xi,yi)(xi,yi),如果|yi−w∙ϕ(xi)−b|≤ϵ|yi−w∙ϕ(xi)−b|≤ϵ,則完全沒有損失,如果|yi−w∙ϕ(xi)−b|>ϵ|yi−w∙ϕ(xi)−b|>ϵ,則對應的損失為|yi−w∙ϕ(xi)−b|−ϵ|yi−w∙ϕ(xi)−b|−ϵ,這個均方差損失函數不同,如果是均方差,那么只要yi−w∙ϕ(xi)−b≠0yi−w∙ϕ(xi)−b≠0,那么就會有損失。
如下圖所示,在藍色條帶里面的點都是沒有損失的,但是外面的點的是有損失的,損失大小為紅色線的長度。

總結下,我們的SVM回歸模型的損失函數度量為:
2. SVM回歸模型的目標函數的原始形式
上一節我們已經得到了我們的損失函數的度量,現在可以可以定義我們的目標函數如下:
和SVM分類模型相似,回歸模型也可以對每個樣本(xi,yi)(xi,yi)加入松弛變量ξi≥0ξi≥0, 但是由於我們這里用的是絕對值,實際上是兩個不等式,也就是說兩邊都需要松弛變量,我們定義為ξ∨i,ξ∧iξi∨,ξi∧, 則我們SVM回歸模型的損失函數度量在加入松弛變量之后變為:
依然和SVM分類模型相似,我們可以用拉格朗日函數將目標優化函數變成無約束的形式,也就是拉格朗日函數的原始形式如下:
其中 μ∨≥0,μ∧≥0,α∨i≥0,α∧i≥0μ∨≥0,μ∧≥0,αi∨≥0,αi∧≥0,均為拉格朗日系數。
3. SVM回歸模型的目標函數的對偶形式
上一節我們講到了SVM回歸模型的目標函數的原始形式,我們的目標是
和SVM分類模型一樣,這個優化目標也滿足KKT條件,也就是說,我們可以通過拉格朗日對偶將我們的優化問題轉化為等價的對偶問題來求解如下:
我們可以先求優化函數對於w,b,ξ∨i,ξ∧iw,b,ξi∨,ξi∧的極小值, 接着再求拉格朗日乘子α∨,α∧,μ∨,μ∧α∨,α∧,μ∨,μ∧的極大值。
首先我們來求優化函數對於w,b,ξ∨i,ξ∧iw,b,ξi∨,ξi∧的極小值,這個可以通過求偏導數求得:
好了,我們可以把上面4個式子帶入L(w,b,α∨,α∧,ξ∨i,ξ∧i,μ∨,μ∧)L(w,b,α∨,α∧,ξi∨,ξi∧,μ∨,μ∧)去消去w,b,ξ∨i,ξ∧iw,b,ξi∨,ξi∧了。
看似很復雜,其實消除過程和系列第一篇第二篇文章類似,由於式子實在是冗長,這里我就不寫出推導過程了,最終得到的對偶形式為:
對目標函數取負號,求最小值可以得到和SVM分類模型類似的求極小值的目標函數如下:
對於這個目標函數,我們依然可以用第四篇講到的SMO算法來求出對應的α∨,α∧α∨,α∧,進而求出我們的回歸模型系數w,bw,b。
4. SVM回歸模型系數的稀疏性
在SVM分類模型中,我們的KKT條件的對偶互補條件為: α∗i(yi(w∙ϕ(xi)+b)−1)=0αi∗(yi(w∙ϕ(xi)+b)−1)=0,而在回歸模型中,我們的對偶互補條件類似如下:
根據松弛變量定義條件,如果|yi−w∙ϕ(xi)−b|<ϵ|yi−w∙ϕ(xi)−b|<ϵ,我們有ξ∨i=0,ξ∧i=0ξi∨=0,ξi∧=0,此時ϵ+ξ∨i+yi−w∙ϕ(xi)−b≠0,ϵ+ξ∧i−yi+w∙ϕ(xi)+b≠0ϵ+ξi∨+yi−w∙ϕ(xi)−b≠0,ϵ+ξi∧−yi+w∙ϕ(xi)+b≠0這樣要滿足對偶互補條件,只有α∨i=0,α∧i=0αi∨=0,αi∧=0。
我們定義樣本系數系數
根據上面ww的計算式w=∑i=1m(α∧i−α∨i)ϕ(xi)w=∑i=1m(αi∧−αi∨)ϕ(xi),我們發現此時βi=0βi=0,也就是說ww不受這些在誤差范圍內的點的影響。對於在邊界上或者在邊界外的點,α∨i≠0,α∧i≠0αi∨≠0,αi∧≠0,此時βi≠0βi≠0。
5. SVM 算法小結
這個系列終於寫完了,這里按慣例SVM 算法做一個總結。SVM算法是一個很優秀的算法,在集成學習和神經網絡之類的算法沒有表現出優越性能前,SVM基本占據了分類模型的統治地位。目前則是在大數據時代的大樣本背景下,SVM由於其在大樣本時超級大的計算量,熱度有所下降,但是仍然是一個常用的機器學習算法。
SVM算法的主要優點有:
1) 解決高維特征的分類問題和回歸問題很有效,在特征維度大於樣本數時依然有很好的效果。
2) 僅僅使用一部分支持向量來做超平面的決策,無需依賴全部數據。
3) 有大量的核函數可以使用,從而可以很靈活的來解決各種非線性的分類回歸問題。
4)樣本量不是海量數據的時候,分類准確率高,泛化能力強。
SVM算法的主要缺點有:
1) 如果特征維度遠遠大於樣本數,則SVM表現一般。
2) SVM在樣本量非常大,核函數映射維度非常高時,計算量過大,不太適合使用。
3)非線性問題的核函數的選擇沒有通用標准,難以選擇一個合適的核函數。
4)SVM對缺失數據敏感。
之后會對scikit-learn中SVM的分類算法庫和回歸算法庫做一個總結,重點講述調參要點,敬請期待。
