有效地结合使用sklearn的管道和gridSearchCV

时间:2018-06-28 13:13:25

标签: python machine-learning scikit-learn pipeline grid-search

我只使用了sklearn了很短的时间,目前我正在尝试与GridSearchCV一起构建管道。据我所知,如果您要将已知的转换序列与最终估算器结合在一起并保持关联的交叉验证一致,那么管道特别有用。但是,我想另外使用管道将一组预处理步骤与一组估计器任意组合。 例如,假设我有一个预处理对象(例如StandardScaler())和两个估计器对象(例如Lasso()和PLSRegression())。为了考虑这些对象的不同可能组合(在这里:StandardScaler()和Lasso())或(StandardScaler()和PLSRegression())),我构造了管道和关联的GridSearchCV对象,如下所示:

# Instantiate the pipeline with a sequence of steps
pipe = Pipeline(steps=[('preprocessor',None), ('estimator',None)])  

# Construct the parameter grid accounting for different combinations 
# of preprocessing and estimation steps
params = [{         
                    'estimator': [Lasso()],
                    'estimator__alpha': [0.5, 1],

                    'preprocessor': [StandardScaler()],
                    'preprocessor__with_mean': [True, False]                   
                    },       
            {
                    'estimator': [PLSRegression()],
                    'estimator__n_components': [1, 2],

                    'preprocessor': [StandardScaler()],
                    'preprocessor__with_mean': [True, False]                    
                    }]

# Instantiate GridSearchCV object
gs = GridSearchCV(estimator=pipe,
                  param_grid=params)

我在较早的帖子"Parallel" pipeline to get best model using gridsearch中找到了此解决方案。但是,我发现这有些麻烦,因为要么必须手动定义所有可行的管道步骤组合,要么必须编写一个hacky函数来为我完成这项工作。尤其是,在具有更多预处理步骤和更多种类的估计器的情况下,这不是我想要做的。有没有其他更简单的方法来评估预处理器和估计器的不同组合,最好是在管道/ GridSearchCV结构本身中?

0 个答案:

没有答案