为啥以两种不同方式应用随机森林分类器的特征选择结果不同

Posted

技术标签:

【中文标题】为啥以两种不同方式应用随机森林分类器的特征选择结果不同【英文标题】:Why are feature selection results different for Random forest classifier when applied in two different ways为什么以两种不同方式应用随机森林分类器的特征选择结果不同 【发布时间】:2021-08-23 21:19:50 【问题描述】:

我想做特征选择,我使用了随机森林分类器,但做了不同的事情。

我使用了sklearn.feature_selection.SelectfromModel(estimator=randomforestclassifer...),并独立使用了随机森林分类器。令人惊讶的是,虽然我使用了相同的分类器,但结果却不同。除了一些两个特点,所有其他的都是不同的。有人可以解释为什么会这样吗?可能是因为这两种情况下参数发生了变化?

【问题讨论】:

【参考方案1】:

这可能是因为select_from_model默认重新拟合估计器,sklearn.ensembe.RandomForestClassifier有两个伪随机参数:bootsrap,默认设置为Truemax_features,设置为@987654326 @ 默认情况下。

如果您没有在randomforestclassifier 估计器中设置random_state,那么由于bootstrapmax_features 参数引入的随机性,每次拟合模型时它很可能会产生不同的结果,甚至在相同的训练数据上。

bootstrap=True 表示每棵树将在训练数据集中一定百分比的观察值的一定百分比的随机样本(有替换)上进行训练。

max_features='auto' 表示在构建每个节点时,只会考虑训练数据中特征数量的平方根,以选择最能减少 gini 杂质的截止点。

您可以做两件事来确保获得相同的结果:

    首先训练您的估算器,然后使用select_from_model(randomforestclassifier, refit=False)。 用随机种子声明randomforestclassifier,然后使用select_from_model

不用说,这两个选项都要求您传递相同的 Xy 数据。

【讨论】:

以上是关于为啥以两种不同方式应用随机森林分类器的特征选择结果不同的主要内容,如果未能解决你的问题,请参考以下文章

[机器学习python实践]Sklearn实现集成

随机森林与Adaboost

在拥有分类数据时,使用 Sklearn 随机森林进行特征选择并没有给我预期的结果

为啥打乱训练数据会影响我的随机森林分类器的准确性?

随机森林

利用随机森林对特征重要性进行评估