python sklearn非线性svm惩罚

时间:2017-04-14 08:24:42

标签: python python-2.7 machine-learning scikit-learn svm

我正在使用带有sklearn的Python 2.7并使用带有rbf内核的sklearn.svm.SVC并且过度拟合。

我按照here的说法尝试使用C和Gamma 并没有做到这一点

如果我理解正确C和gamma不是l1和l2惩罚,因为C是分类错误的惩罚,而gamma是关于数据样本的泛化参数。我正在寻找能够惩罚模型的东西,如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中缺席的惩罚,我正在寻找正确的方法来做到这一点,这是我找到的最接近的。

查看SVC类的docs我发现它没有惩罚属性

如何使用lb和l2惩罚rbf内核svm或者如果我不能如何防止过度拟合该模型呢?

1 个答案:

答案 0 :(得分:0)

如果我没有弄错l1和l2正则化只能用于线性系统,即线性内核,因此用于非线性内核的不同正则化方法的开发。此外,随着尺寸数量增加l1和l2正则化,变得越来越不有效。这是Curse of Dimensionality的结果,这也是为什么开发了用于这些特征空间的不同正则化方法的原因。

我必须同意@Vivek Kumar的观点,在给定您选择的内核的情况下,利用网格搜索方法来调整您的gamma和C值将是避免SVM过度拟合的最佳方法。