尝试使用管道和网格搜索运行随机森林分类器时出错
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
步骤。
请相应地调整您的网格搜索参数前缀(即从RF
到randomforestclassifier
)。例如,RF__criterion
应变为 randomforestclassifier__criterion
。
【讨论】:
我仍然遇到同样的错误。我将网格搜索中的所有 RF 更改为 randomforestclassifier。 新的错误信息是什么?顺便说一句,您的原始错误消息不完整,您的问题/代码示例中可能缺少一些关键信息。 另外,我不知道你只能使用'__'来访问管道步骤的参数【参考方案2】:您没有正确添加关键字。您必须在每个参数之前使用 2 个下划线 ( __ )。您只使用了 1 个下划线 (_),这是行不通的。
【讨论】:
以上是关于尝试使用管道和网格搜索运行随机森林分类器时出错的主要内容,如果未能解决你的问题,请参考以下文章