尝试使用管道和网格搜索运行随机森林分类器时出错

Posted

技术标签:

【中文标题】尝试使用管道和网格搜索运行随机森林分类器时出错【英文标题】:Error when trying to run RandomForestClassifier with Pipieline and GridSearch 【发布时间】:2020-09-21 14:01:51 【问题描述】:

我正在尝试使用 Pipeline、GridSerach 和 CV 运行 RandomForest 分类器

拟合数据时出现错误。我不知道如何解决它。 我发现了一个与解决方案 https://***.com/a/34890246/9592484 类似的问题,但对我不起作用

将不胜感激这方面的任何帮助。

我的代码是:

 column_trans = make_column_transformer((OneHotEncoder(), ['CategoricalData']),
 remainder='passthrough')
 RF = RandomForestClassifier()
 pipe = make_pipeline(column_trans, RF)

 # Set grid search params
 grid_params = ['randomforestclassifier_criterion': ['gini', 'entropy'],
 'randomforestclassifier_min_samples_leaf': [5,10,20,30,50,80,100],
 'randomforestclassifier_max_depth': [3,4,6,8,10],
 'randomforestclassifier_min_samples_split': [2,4,6,8,10]]

 # Construct grid search
 gs = GridSearchCV(estimator = pipe,
 param_grid = grid_params,
 scoring='accuracy',
 cv=5)

 gs.fit(train_features, train_target)  ----This is where I get an error


ValueError: Invalid parameter randomforestclassifier_criterion for estimator Pipeline(steps=[('columntransformer',
             ColumnTransformer(remainder='passthrough',
                               transformers=[('onehotencoder',
                                              OneHotEncoder(),
                                              ['saleschanneltypeid'])])),
            ('randomforestclassifier', RandomForestClassifier())]). Check the list of available parameters with `estimator.get_params().keys()`.

【问题讨论】:

【参考方案1】:

make_pipeline 实用函数从转换器/估计器类名称派生步骤名称。例如,RandomForestClassifier 映射到randomforestclassifier 步骤。

请相应地调整您的网格搜索参数前缀(即从RFrandomforestclassifier)。例如,RF__criterion 应变为 randomforestclassifier__criterion

【讨论】:

我仍然遇到同样的错误。我将网格搜索中的所有 RF 更改为 randomforestclassifier。 新的错误信息是什么?顺便说一句,您的原始错误消息不完整,您的问题/代码示例中可能缺少一些关键信息。 另外,我不知道你只能使用'__'来访问管道步骤的参数【参考方案2】:

您没有正确添加关键字。您必须在每个参数之前使用 2 个下划线 ( __ )。您只使用了 1 个下划线 (_),这是行不通的。

【讨论】:

以上是关于尝试使用管道和网格搜索运行随机森林分类器时出错的主要内容,如果未能解决你的问题,请参考以下文章

未知标签类型:在多类分类问题上使用随机森林分类器时“连续”

随机森林中的网格搜索 (RandomForestSRC)

如何调整管道内随机森林分类器中的参数?

使用随机森林作为带有 adaboost 的基础分类器

Lesson 9.3 集成算法的参数空间与网格优化和使用网格搜索在随机森林上进行调参

带有列名的pyspark随机森林分类器特征重要性