2017-04-14 90 views
1

我使用Python 2.7與sklearn和使用rbf內核sklearn.svm.SVC並遭受過度擬合。python sklearn非線性svm懲罰

我試圖用C和伽馬解釋here ,並沒有這樣的伎倆

如果我理解正確的C和伽瑪沒有L1和L2懲罰,因爲C是懲罰分類錯誤和γ是關於數據樣本的泛化參數。我正在尋找一些能夠懲罰像l1和l2這樣的複雜模型的東西。

我想使用正則化和l1或l2懲罰,我發現了一些例子here,但是當我嘗試使用懲罰參數與SVC它會引發錯誤。

svr_rbf = sklearn.svm.SVC(kernel='rbf', cache_size=1, class_weight={1:100}, penalty='l1') 

並且得到錯誤

traceback (most recent call last): 
    File "/home/thebeancounter/PycharmProjects/nlp4/try.py", line 235, in <module> 
    svr_rbf = SVC(kernel='rbf', cache_size=1, class_weight={1:100}, penalty='l1') 
TypeError: __init__() got an unexpected keyword argument 'penalty' 

我知道的例子是不好的這種情況下,我嘗試使用點球是在SVC缺席,我正在尋找合適這樣做的方式,這是我發現的最接近。

docs爲SVC類我看到它有沒有處罰屬性

如何使用L1和L2懲罰與RBF核SVM,或者如果我不能讓我戴一下是怎麼回事,以防止過度適合那種模式?

+0

你會得到這個錯誤,因爲在你引用的例子中,他們使用[LinearSVC](http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html# sklearn.svm.LinearSVC) –

+0

參數'C'是SVC的懲罰參數 –

+1

@VivekKumar謝謝,我知道,我正在尋找正確的方式去做 – thebeancounter

回答

0

如果我沒有弄錯l1和l2正則化只能用於線性系統,即線性核,從而開發用於非線性核的不同正則化方法。此外,隨着維數的增加,l1和l2正則化的效果越來越差。這是Curse of Dimensionality的結果,這也是爲什麼在這些特徵空間中使用不同的正則化方法的部分原因。

我有@Vivek庫馬爾同意,利用來調整你的伽馬值和C值將是避免SVM的過學習的最佳方法網格搜索方法,根據您選擇的內核。

+0

我讀了你發送的內容,這是有道理的,我有點合適 - 我正在深入學習一門課程,而proffesor正在教我們深層的網絡使用l1和l2正則化,在我們的這裏才明白嗎? @Grr – thebeancounter