關於SVM中,對常數C的理解?

最近在看一些數據挖掘方面的論文,偶然看到一位師兄對支持向量機中常數C的解釋:

對於常數C,在我之前查到的資料中,是這樣寫的:

C值較大,表明越不希望看到離群點。

由於自己在數學方面的知識儲備並不是很豐富,所以想請教一下各位知友:

SVM的常數C,到底應該怎麼理解?

謝謝大家!!

----

大年初一,祝知友們猴年快樂,天天開心。祝知乎在猴年越辦越好!!


按照LibSVM的習慣,SVM的目標函數是這樣的:

這裡的參數C代表的是在線性不可分的情況下,對分類錯誤的懲罰程度。

C值越大,分類器就越不願意允許分類錯誤(「離群點」)。如果C值太大,分類器就會竭盡全力地在訓練數據上少犯錯誤,而實際上這是不可能/沒有意義的,於是就造成過擬合。

而C值過小時,分類器就會過於「不在乎」分類錯誤,於是分類性能就會較差。


你可以把這個參數C理解為調節優化方向中兩個指標(間隔大小,分類準確度)偏好的權重。soft-margin SVM針對hard-margin SVM容易出現的過度擬合問題,適當放寬了margin的大小,容忍一些分類錯誤(violation),把這些樣本當做雜訊處理,本質上是間隔大小和雜訊容忍度的一種trade-off,至於具體怎麼trade-off,對哪個指標要求更高,那就體現在C這個參數上了。

如 @王贇 Maigo 所使用的hinge損失函數來表示對於樣本的分類偏差loss = max left( {0,1 - yleft( {{{f{w}}^T}{f{x}} + b} 
ight)} 
ight),引入鬆弛變數把優化問題寫為:

egin{align}
mathop {min }limits_{{f{w}},b,{f{xi }}} quad frac{1}{2}{left| f{w} 
ight|^2} + Csumlimits_{i = 1}^n {{xi _i}} \
s.t.  quad {y_i}left( {{{f{w}}^T}{{f{x}}_i} + b} 
ight) ge 1 - {xi _i} \
 quad {xi _i} ge 0 \
 quad i = 1,2, ldots ,N
end{align}

這裡的xi_i就是對於第i個樣本點的分類損失,如果分類正確則是0,如果分類有所偏差則對應一個線性的值, sumlimits_{i = 1}^n {{xi _i}}是總誤差,我們優化的目標當然是這個值越小越好,越小代表對訓練集的分類越精準。目標函數中的另一項left| f{w} 
ight|^2(常數1/2是為了方便求導加上去的)的最小化的優化方向則是使間隔大小2/left| f{w} 
ight|最大。

原則上C可以根據需要選擇所有大於0的數。C越大表示整個優化過程中對於總誤差 sumlimits_{i = 1}^n {{xi _i}}的關注程度越高,對於減小誤差的要求越高,甚至不惜使間隔減小。

  • 當C趨於無窮大時,這個問題也就是不允許出現分類誤差的樣本存在,那這就是一個hard-margin SVM問題
  • 當C趨於0時,我們不再關注分類是否正確,只要求間隔越大越好,那麼我們將無法得到有意義的解且演算法不會收斂。

這裡有一組Guassian kernel/soft-margin SVM在不同參數C下的實驗結果[1]:

C值越大對於訓練集的表現越好,但是間隔減小也就是對於雜訊等干擾的容忍度減小,可能引發過度擬合(overfitting),這時說明對於雜訊的懲罰力度太大。

想像我們要挑選合適的記者去參與新聞的採訪報道。那麼現在的評價指標有兩個,一個是記者對於新聞的靈敏度,是否跑的快善於弄大新聞(間隔大小),一個是基於過去的表現(訓練集)記者對於新聞報道的準確性如何,是否產生偏差,專業素質知識水平如何(分類誤差),hard-margin SVM是挑選看上去報道準確知識水平最高的記者中跑得最快的,可能導致換個採訪話題就出現偏差。而soft-margin則看重記者跑得快弄大新聞的潛力,在過去的專業表現上作出一定的妥協,允許她問出一些膚淺的問題,C越小說明越不關心記者的知識水平,當C趨近於0時,可能出現當眾熱惱interviewee然後被怒斥的場面(演算法發散且得出的解都無意義)

很慚愧,只做了一些微小的工作。

最後祝大家身體健康,提前連任。

參考資料:

[1] Machine Learning Techniques: https://www.coursera.org/course/ntumltwo


可以理解為對分類錯誤的容忍度或者對分類錯誤的懲罰力度

C越大表示懲罰越大,越不能容忍錯誤,容易造成over fitting

C越小與之相反,容易造成underfitting 。

工業上經常默認使用1。

然後會grid search嘗試0.1,0.5,10等等數字


結論: 1/C的作用和l2 regularization coefficient的作用是一樣的。

下面是解釋

1. 就像 @王贇 Maigo 的回答里提到的那樣, 教科書中的SVM通常是這樣的 (L2 SVM):

2. 這個優化問題是哪裡來的呢?考慮到SVM使用的是hinge loss,上述regularized optimization 問題實際上是這樣的:

min_omega mathcal{L} = min_omega { frac{1}{2} omega^Tomega + C sum_{n=1}^{N}max[0,1-y_n (omega^Tcdot x_n)]}

其中,最右邊的項是hinge loss (習慣問題,我把(1)裡面的樣本下標(i,l)寫成(n,N)了)

3. 等價地,(2)裡面的目標函數稍加整理/變化以後是這樣的:

min_omega mathcal{L} = min_omega sum_{n=1}^{N}max[0,1-y_n (omega^Tcdot x_n)] +  frac{1}{2C} ||omega||^2

這樣可以把SVM 目標函數理解成使用l2 regularization的hinge loss,而l2 regularization coefficient和C 是反比關係。 這時我們就可以用「分析regularization coefficient對learning的影響「這個思路來理解C的作用了4. 最後提一個引申問題:

linear svm裡面,對feature 做線性變換會導致學出來的linear svm 在同一個test data (當然,我們會使用變換前和變換後的testing data做測試)給出不同的預測結果嗎?==&>是的,因為標準的SVM 裡面自帶regularization項(如果沒有這個regularization term,對fature 做線性變換Ax以後,可以對參數做相應的線性變換A^{-1}W 得到完全相同的預測結果)。


最近在研究svm的相關課題,正好答一下:

C又稱為penalty term,指的是SVM里拉格朗日乘數的約束程度。

為什麼需要C:

上圖明顯是一個過度擬合的問題,為了解決這類問題或者甚至為了解決某些非線性可分的問題,C的大小決定了對於outlier的忍受程度。忍受程度越強,支持向量就越多(support vector)。下圖為例,圓圈標記的則為支持向量:

總的來說,C值越大,越過度擬合;反之有可能欠擬合。C值的最優解通常通過grid search得到。

圖片來源Stackoverflow


感覺樓上回答沒有擊中要害,所以怒答此題。。。。。

要理解C的含義,就需要理解xi_{i}的含義:xi_{i}可以理解為hinge loss,而當幾何間距(geometric margin)小於1時hinge loss時是一條直線(圖像見答案末),那麼乘以C可以理解為這條直線的斜率。可以類比L1正則和L2正則中的lambda

----------------------------------------------------------------------------------------------

以下是詳細步驟:

SVM的目標問題:

應用拉格朗日乘子法得

l(omega ,b,xi,alpha ,r )=frac{1}{2} omega^{T}omega+Csum_{i=1}^{m}{xi_i} -sum_{i=1}^{m}{alpha_i[y^{(i)}(omega^T x^{(i)}+b)-1+xi_i ]} - sum_{i=1}^{m}{r_ixi_i}

那麼對待優化變數求偏微分

frac{partial l}{partialomega} =0 Rightarrow w=sum_{i=1}^{m}{alpha_i y^{(i)} x^{(i)} } (1)

frac{partial l}{partial b} =0 Rightarrow sum_{i=1}^{m}{alpha_i y^{(i)} }  = 0 (2)

frac{partial l}{partialxi_{i}} =0 Rightarrow alpha_{i}=C-r_{i} (3)

根據KKT互補條件,

alpha_i[y^{(i)}(omega^T x^{(i)}+b)-1+xi_i ]=0 (4)

r_{i}xi_{i}=0 (5)

所以,將(3) (4) (5)帶入以下式子

alpha_{i}=0 Rightarrow r_{i}=C, xi_{i}=0 Rightarrow y^{(i)}(omega^T x^{(i)}+b) geq  1,幾何間距&>=1樣本的xi_{i}=0

0<alpha_{i}<C Rightarrow r_{i}>0 , xi_{i}=0 Rightarrow y^{(i)}(omega^T x^{(i)}+b)=1-xi_{i} = 1,幾何間距為1的樣本,也就是支持向量的xi_{i}=0

alpha_{i}=C Rightarrow r_{i}=0, xi_{i}geq 0 Rightarrow y^{(i)}(omega^T x^{(i)}+b)=1-xi_{i}leq 1只有樣本與決策邊界的幾何間距(geometric margin)小於1時,xi_{i}>0才成立。而且他們之間的等式關係為xi_{i}=1-y^{(i)}(omega^T x^{(i)}+b)

----------------------------------------------------------------------------------------------

hinge loss定義如下:

l(x,y)=max(0,1-y*h(x))

可以發現我們以上求出的xi_{i}=1-y^{(i)}*h(x^{(i)})就是hinge loss 的形式。

----------------------------------------------------------------------------------------------

當y=1時,hinge loss圖中藍色的線條,縱坐標為hinge loss,橫坐標為y*h(x),即為幾何間距。

也就是C=1的特例


樓上各位大神都回答的很詳盡了,那我來從優化的角度答一發。偷懶,公式粗體什麼的都沒加,圖也懶得上了XD。

我們只關注原問題,因為原問題比對偶問題更直觀一些。並且把約束條件直接放到目標函數中,即

min_{w,b}~frac{1}{2}|w|^2 + Csum_i ell[y_i(w^Tx_i+b)-1],

這裡的ell(cdot)是一個損失函數loss function,表示不滿足hard margin時造成的損失,最常見的就是hinge loss,即ell(z)=max(0, 1-z),引入鬆弛變數slack variables就可以等價轉寫為樓上各位回答中的形式。我們這裡就直接討論更一般的情形。

C&>0可以認為是一個罰參數,表示對後面一項的懲罰程度。理解這種問題的一個通用思路就是試試看在極端值會發生什麼。

當C=0時,Csum_i ell[y_i(w^Tx_i+b)-1]直接忽略,也就是說不論分離超平面位置在哪裡,都不會對目標函數造成損失,問題就變為min~frac{1}{2}|w|^2,那麼他的解就是w = old{0}

當C=inf時,損失函數即使只增加一點點,都會導致目標函數值變為正無窮,也就硬性要求ell[y_i(w^Tx_i+b)-1]=0,此時問題等價於hard margin,如果線性不可分,也就無可行解了。如果不這麼極端,C只是充分大,那麼就要求loss function儘可能的小,即盡最大可能滿足hard margin約束,這就會導致過擬合。

C這類罰參數的一個問題就是沒有更直接的物理意義,一種解決方法就是用另一個更直觀的參數來替代,最著名的就是
u-mathrm{SVM}了。(偷懶我就不寫式子了)其中用參數
u in (0, 1]取代了原來的C,
u的意義是margin errors(原文中把其定義為xi_i >0的點)的比例的上界,也就是說我最多允許
u m個點越過margin bounds,不過
u也限定了支持向量比例的下界。

舉個例子,
u=0.5,表示我最多允許一半的數據y_i(w^Tx_i+b)<1,但同時,至少有一半的數據最終都會作為支持向量。

最後,libsvm和R中都包含了
u-mathrm{SVM}喲!

參考文獻:

Sch?lkopf B, Smola A J, Williamson R C, et al. New Support Vector Algorithms[J]. Neural Computation, 2000, 12(5):1207-1245.

Chang, ChihChung, Lin, et al. LIBSVM: A library for support vector machines[J]. Acm Transactions on Intelligent Systems Technology, 2011, 2(3):389-396.


題主如果不想去探討數學上的意義,那麼記住結論就好了。 svm訓練中,參數c取得越大,就是對錯分樣本的懲罰越大,極端情況下,就是訓練出來的分類器使得每個訓練樣本都正確分類。那麼想像一下,在有雜訊樣本的情況下,這麼做會導致過擬合。

參數c取得越小,就會有越多的樣本被訓練出來的分類器錯分,一些正常的樣本也被當成雜訊處理了。

所以應該取合適的c,不過如何取這個c也是挺麻煩的。


如果你只是用SVM做個分類應用的話,那簡單理解就可以了。

記住 C是懲罰參數 就好。

懲罰參數是用來懲罰什麼的呢? 答:懲罰 訓練誤差

1、若C的值取得大一點,意味著對訓練誤差的懲罰力度大一點,此時能把訓練數據分類的誤差控制的很好(提高模型在訓練數據集上的分類正確率),但也帶來了分類間隔過小的問題。由於分類間隔過小,把訓練所得的分類器向更大的測試樣本推廣時,泛化能力會受到影響。
2、若C的值取得適當小一點,往往能更好地平衡分類間隔和訓練誤差的關係。我們適當允許一些訓練樣本在分類時出錯,以此獲得更大的分類間隔,使得在推廣到更大的測試樣本時效果更好一些。

具體調參,一般是用 10折交叉驗證(思路:把數據集分割依次測試)+網格搜索法(思路:先邁大步子再邁小步子) 進行的。

詳細演算法的話,參考一下周志華老師寫的書,或者從知網上下一篇用SVM做實驗的碩士論文,都會細講。


相當於神經網路的正則係數,線性回歸中的嶺回歸係數(其實就是高維空間的嶺回歸係數),用於控制泛化性能


推薦閱讀:

費曼圖展開是漸近展開在物理上意味著什麼?
對數學的迷茫?
如何用向量法證明:內接於半圓且以直徑為一邊的三角形為直角三角形?
遞推公式中含有項數的數列極限問題?
如何評價何吉歡常年居(國內數學界)高引榜首?

TAG:演算法 | 數據挖掘 | 數學 | SVM |