2017-04-14 95 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