GridSearchCV 是用 rbf 内核和不同程度计算 SVC 吗?

Posted

技术标签:

【中文标题】GridSearchCV 是用 rbf 内核和不同程度计算 SVC 吗?【英文标题】:Is GridSearchCV computing SVC with rbf kernel and different degrees? 【发布时间】:2017-09-04 11:16:09 【问题描述】:

我正在运行 GridSearchCVOneVsRestClasssifer,使用 SVC 作为估算器。这是我的PipelineGridSearchCV 参数的方面:

pipeline = Pipeline([
    ('clf', OneVsRestClassifier(SVC(verbose=True), n_jobs=1)),
    ])

parameters = 
    "clf__estimator__C": [0.1, 1],
    "clf__estimator__kernel": ['poly', 'rbf'],
    "clf__estimator__degree": [2, 3],


grid_search_tune = GridSearchCV(pipeline, parameters, cv=2, n_jobs=8, verbose=10)
grid_search_tune.fit(train_x, train_y)

根据 SVC 的文档,degree 参数仅供poly 内核使用:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

degree:int,可选(默认=3)

多项式核的度数 函数('poly')。被所有其他内核忽略。

但是当我看到GridSearchCV 的输出时,它似乎正在为每个SVC 配置计算不同的运行,其中rbf 内核和degree 参数的值不同。

[CV] clf__estimator__kernel=poly, clf__estimator__C=0.1, clf__estimator__degree=2
[CV] clf__estimator__kernel=poly, clf__estimator__C=0.1, clf__estimator__degree=2
[CV] clf__estimator__kernel=rbf, clf__estimator__C=0.1, clf__estimator__degree=2
[CV] clf__estimator__kernel=rbf, clf__estimator__C=0.1, clf__estimator__degree=2
[CV] clf__estimator__kernel=poly, clf__estimator__C=0.1, clf__estimator__degree=3
[CV] clf__estimator__kernel=poly, clf__estimator__C=0.1, clf__estimator__degree=3
[CV] clf__estimator__kernel=rbf, clf__estimator__C=0.1, clf__estimator__degree=3
[CV] clf__estimator__kernel=rbf, clf__estimator__C=0.1, clf__estimator__degree=3

当内核设置为rbf时,不应该忽略所有度的值吗?

【问题讨论】:

【参考方案1】:

这里显示的输出只是GridSearchCV 传递给内部估计器的参数的不同组合,即SVC。但是否使用它们取决于SVC。在这种情况下,SVC 不会抛出任何错误,也不会使用degree。您应该打印您怀疑的所有组合的分数。他们应该是平等的。这将告诉您 degree 参数未使用。

注意:确保将random_stateGridSearchCV 设置为重复测试。

说明: GridSearchCV 的工作就是将参数传递给 estimator 进行拟合,然后使用测试数据进行评分,得出最佳分数的参数组合。

当不兼容的参数组合传递给估算器时,它取决于实现,是否忽略参数或引发错误。

例如。在LogisticRegression中,有两个参数:

penalty : str, ‘l1’ or ‘l2’, default: ‘l2’ 
         Used to specify the norm used in the penalization.

solver : ‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, default: ‘liblinear’. 
         Algorithm to use in the optimization problem.
        ‘newton-cg’, ‘lbfgs’ and ‘sag’ only handle L2 penalty. 

如您所见,如果我将l1 惩罚与newton-cg 求解器一起使用,则会导致不兼容。因此,估计器可能会选择完全忽略惩罚参数或抛出错误。在这种情况下,它会引发错误。

【讨论】:

感谢您的回答,我必须检查分数,但我怀疑对于每个不同的度值,正在计算 SVC(kernel='rbf') 的运行,如果是真的,是浪费时间,因为所有的分数都应该是一样的。 GridSearchCV 应该足够“聪明”以丢弃这些分数,我将在 sklearn 邮件列表中写下它。 @DavidBatista 是的。将针对不同的度值计算相同的运行。当然是邮件列表。我们可以将 dict 更改为仅在 dict 中具有兼容组合的 dicts 列表。类似tuned_parameters in :scikit-learn.org/stable/auto_examples/model_selection/…

以上是关于GridSearchCV 是用 rbf 内核和不同程度计算 SVC 吗?的主要内容,如果未能解决你的问题,请参考以下文章

GridSearchCV 的结果作为表格

SVM 内核的速度?线性 vs RBF vs 多边形

SciKit SGD 回归器 RBF 内核逼近

线性内核与 RBF 内核

如何使用 GridSearchCV 进行一类分类

调整 SVM 回归的参数