如何在 scikit-learn GridSearchCV 中设置参数进行搜索

数据挖掘 分类 scikit-学习
2022-02-14 07:29:37

我想使用 scikit-learn 的 GridSearchCV 来优化使用支持向量分类器 (SVC) 的 BaggingClassifier。我希望网格搜索搜索 BaggingClassifier 和 SVC 的参数。

我试过这个设置:

svc_pipe = Pipeline([
     ('svc', SVC(probability=True)),
])
pipe = Pipeline([
     ('bag', BaggingClassifier(svc_pipe, no_estimators=50)),
])

params = {
    'bag__bootstrap_features' : [True, False],
    'bag__svc__kernel': ['linear', 'rbf'],
    'bag__svc__decision_function_shape': ['ovo', 'ovr']
}

rnd_search = GridSearchCV(pipe, param_grid=params)

但我收到此错误:

ValueError: Invalid parameter svc for estimator BaggingClassifier(base_estimator=Pipeline(memory=None,
     steps=[('svc', SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=True, shrinking=True,
  tol=0.001, verbose=False))]),
         bootstrap=True, bootstrap_features=True, max_features=1.0,
         max_samples=1.0, n_estimators=50, n_jobs=-1, oob_score=False,
         verbose=0, warm_start=False). Check the list of available parameters with `estimator.get_params().keys()`.

有人可以告诉我我做错了什么吗?

1个回答

有错别字pipeno_estimators应该是n_estimators

为了解决您的问题,如果您运行以下代码:

for param in rnd_search.get_params().keys():
    print(param)

这将向您展示如何将参数传递到管道的不同部分,感兴趣的参数是:

  • bag__base_estimator__svc__kernel
  • bag__base_estimator__svc__decision_function_shape

所以你几乎就在那里,你只是base_estimator__svc管道参数中丢失了。您需要做的就是更改svc参数,如下所示:

params = {
    'bag__bootstrap_features' : [True, False],
    'bag__base_estimator__svc__kernel': ['linear', 'rbf'],
    'bag__base_estimator__svc__decision_function_shape': ['ovo', 'ovr']
}