GridSearchCV(sklearn)中的多个估计量

时间:2018-08-01 08:55:06

标签: python scikit-learn grid-search

我正在查看有关GridSearchCV的sklearn文档网页。 GridSearchCV对象的属性之一是best_estimator_。 所以这是我的问题。如何将多个估算器传递给GSCV对象?

使用类似这样的字典: {'SVC()':{'C':10, 'gamma':0.01}, ' DecTreeClass()':{....}}

1 个答案:

答案 0 :(得分:5)

GridSearchCV可处理参数。它将使用与param_grid中指定的参数组合不同的参数组合来训练多个估算器(但同一类(SVC,DecisionTreeClassifier或其他分类器之一)。best_estimator_是对数据表现最佳的估算器。 / p>

因此,best_estimator_本质上是使用最佳找到的参数初始化的同一类对象。

因此,在基本设置中,您不能在网格搜索中使用多个估算器。

但是,作为一种解决方法,当使用一个管道(其中估计器是GridSearchCV可以设置的"parameter")时,可以有多个估计器。

类似这样的东西:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
iris_data = load_iris()
X, y = iris_data.data, iris_data.target


# Just initialize the pipeline with any estimator you like    
pipe = Pipeline(steps=[('estimator', SVC())])

# Add a dict of estimator and estimator related parameters in this list
params_grid = [{
                'estimator':[SVC()],
                'estimator__C': [1, 10, 100, 1000],
                'estimator__gamma': [0.001, 0.0001],
                },
                {
                'estimator': [DecisionTreeClassifier()],
                'estimator__max_depth': [1,2,3,4,5],
                'estimator__max_features': [None, "auto", "sqrt", "log2"],
                },
               # {'estimator':[Any_other_estimator_you_want],
               #  'estimator__valid_param_of_your_estimator':[valid_values]

              ]

grid = GridSearchCV(pipe, params_grid)

您可以根据需要在params_grid列表中添加尽可能多的字典,但是请确保每个字典都具有与'estimator'相关的兼容参数。