關於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損失函數來表示對於樣本的分類偏差,引入鬆弛變數把優化問題寫為:
這裡的就是對於第個樣本點的分類損失,如果分類正確則是0,如果分類有所偏差則對應一個線性的值,是總誤差,我們優化的目標當然是這個值越小越好,越小代表對訓練集的分類越精準。目標函數中的另一項(常數1/2是為了方便求導加上去的)的最小化的優化方向則是使間隔大小最大。原則上C可以根據需要選擇所有大於0的數。C越大表示整個優化過程中對於總誤差的關注程度越高,對於減小誤差的要求越高,甚至不惜使間隔減小。
- 當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):
最近在研究svm的相關課題,正好答一下:C又稱為penalty term,指的是SVM里拉格朗日乘數的約束程度。為什麼需要C:上圖明顯是一個過度擬合的問題,為了解決這類問題或者甚至為了解決某些非線性可分的問題,C的大小決定了對於outlier的忍受程度。忍受程度越強,支持向量就越多(support vector)。下圖為例,圓圈標記的則為支持向量:總的來說,C值越大,越過度擬合;反之有可能欠擬合。C值的最優解通常通過grid search得到。圖片來源Stackoverflow
感覺樓上回答沒有擊中要害,所以怒答此題。。。。。要理解C的含義,就需要理解的含義:可以理解為hinge loss,而當幾何間距(geometric margin)小於1時hinge loss時是一條直線(圖像見答案末),那麼乘以C可以理解為這條直線的斜率。可以類比L1正則和L2正則中的。----------------------------------------------------------------------------------------------以下是詳細步驟:SVM的目標問題:應用拉格朗日乘子法得
那麼對待優化變數求偏微分
(1) (2) (3)根據KKT互補條件, (4) (5)所以,將(3) (4) (5)帶入以下式子當,幾何間距&>=1樣本的當,幾何間距為1的樣本,也就是支持向量的當,只有樣本與決策邊界的幾何間距(geometric margin)小於1時,才成立。而且他們之間的等式關係為。
----------------------------------------------------------------------------------------------hinge loss定義如下:可以發現我們以上求出的就是hinge loss 的形式。----------------------------------------------------------------------------------------------當y=1時,hinge loss圖中藍色的線條,縱坐標為hinge loss,橫坐標為,即為幾何間距。也就是C=1的特例樓上各位大神都回答的很詳盡了,那我來從優化的角度答一發。偷懶,公式粗體什麼的都沒加,圖也懶得上了XD。
我們只關注原問題,因為原問題比對偶問題更直觀一些。並且把約束條件直接放到目標函數中,即
,這裡的是一個損失函數loss function,表示不滿足hard margin時造成的損失,最常見的就是hinge loss,即,引入鬆弛變數slack variables就可以等價轉寫為樓上各位回答中的形式。我們這裡就直接討論更一般的情形。C&>0可以認為是一個罰參數,表示對後面一項的懲罰程度。理解這種問題的一個通用思路就是試試看在極端值會發生什麼。
當C=0時,直接忽略,也就是說不論分離超平面位置在哪裡,都不會對目標函數造成損失,問題就變為,那麼他的解就是。當C=inf時,損失函數即使只增加一點點,都會導致目標函數值變為正無窮,也就硬性要求,此時問題等價於hard margin,如果線性不可分,也就無可行解了。如果不這麼極端,C只是充分大,那麼就要求loss function儘可能的小,即盡最大可能滿足hard margin約束,這就會導致過擬合。C這類罰參數的一個問題就是沒有更直接的物理意義,一種解決方法就是用另一個更直觀的參數來替代,最著名的就是了。(偷懶我就不寫式子了)其中用參數取代了原來的C,的意義是margin errors(原文中把其定義為的點)的比例的上界,也就是說我最多允許個點越過margin bounds,不過也限定了支持向量比例的下界。
舉個例子,,表示我最多允許一半的數據,但同時,至少有一半的數據最終都會作為支持向量。最後,libsvm和R中都包含了喲!
參考文獻: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做實驗的碩士論文,都會細講。
相當於神經網路的正則係數,線性回歸中的嶺回歸係數(其實就是高維空間的嶺回歸係數),用於控制泛化性能
推薦閱讀:
※費曼圖展開是漸近展開在物理上意味著什麼?
※對數學的迷茫?
※如何用向量法證明:內接於半圓且以直徑為一邊的三角形為直角三角形?
※遞推公式中含有項數的數列極限問題?
※如何評價何吉歡常年居(國內數學界)高引榜首?