如何使用 Sklearn 管道进行参数调整/交叉验证?

Posted

技术标签:

【中文标题】如何使用 Sklearn 管道进行参数调整/交叉验证?【英文标题】:How do to parameter tuning/cross-validation with Sklearn's pipeline? 【发布时间】:2018-05-17 05:43:48 【问题描述】:

我刚刚发现了 Sklearn 的管道功能,我认为这对情绪分析很有用。我通过以下方式定义了我的管道:

Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
                         stop_words='english',
                         strip_accents='unicode',
                         max_df=0.5)),
          ('clf', MultinomialNB())

但是,通过以上述方式定义它,我不允许进行参数调整。假设我想查看以下 max_dfs=[0,3,0.4,0.5,0.6,0.7] 以及以下 n_gram 范围 = [(1,1), (1,2), (2,2),并使用交叉验证找到最佳组合。有没有办法在我们的管道外部指定它,以便它知道考虑所有可能的组合?如果是这样,如何做到这一点?

非常感谢您的指导和帮助!

【问题讨论】:

【参考方案1】:

您可以使用set_param 函数为管道中的各个步骤设置参数,并将key_name 作为<stepname>__<paramname> 传递(使用双下划线连接)。

这可以与GridSearchCV 结合使用来识别从给定值中最大化得分函数的参数组合

p = Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
                         stop_words='english',
                         strip_accents='unicode',
                         max_df=0.5)),
          ('clf', MultinomialNB())
g = GridSearchCV(p, 
        param_grid=
              'vect__max_dfs':[0,3,0.4,0.5,0.6,0.7], 'vect__ngram_range':  [(1,1), (1,2), (2,2)])
g.fit(X, y)
g.best_estimator_

【讨论】:

以上是关于如何使用 Sklearn 管道进行参数调整/交叉验证?的主要内容,如果未能解决你的问题,请参考以下文章

python sklearn:使用交叉验证调整参数

XGBoost 与 GridSearchCV、缩放、PCA 和 sklearn 管道中的 Early-Stopping

如何将 KerasClassifier、Hyperopt 和 Sklearn 交叉验证放在一起

使用带有管道和 GridSearch 的 cross_val_score 进行嵌套交叉验证

如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道

如何将交叉验证目标输入管道中的自定义转换器