我正在使用GridSearchCV
作为估算器运行带有OneVsRestClasssifer
的SVC
。这是我的Pipeline
和GridSearchCV
参数的方面:
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
时,是否不应该忽略度的所有值? 最佳答案
此处显示的输出只是GridSearchCV
传递给内部估算器(即SVC
)的参数的不同组合。但是是否使用它们取决于SVC
。在这种情况下,SVC
不会引发任何错误,但也不会使用degree
。您应该打印所有您怀疑的组合的分数。他们应该是平等的。这将告诉您degree
参数未使用。
注意:确保设置random_state
的GridSearchCV
以重复测试。
说明:
GridSearchCV的工作是仅将参数,训练数据传递给估计器以进行拟合,然后使用测试数据进行评分,并得出参数组合,从而获得最佳分数。
当参数的不兼容组合传递给估计器时,它取决于实现,是忽略参数还是引发错误。
例如。在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
惩罚,则会导致不兼容。因此,估算者可以选择完全忽略惩罚参数或抛出错误。在这种情况下,它将引发错误。关于machine-learning - GridSearchCV是否使用rbf内核和不同程度计算SVC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43305757/