scikit-learn - 其他参数中的参数 - 在集成学习中使用带有随机森林的引导聚合

标签 scikit-learn random-forest ensemble-learning

假设我决定使用集成方法 - 如果它有所作为,我们将使用 iris 数据集。在可用的集成技术中,我们将重点关注并行方法,并从中使用 sklearn 进行引导聚合。

Sklearn 使用 BaggingClassifier 实现引导聚合,(文档告诉我们)它是“适合基分类器的集成元估计器……”在这些基分类器中,让我们选择 RandomForestClassifier,它本身就是“一个适合许多决策树分类器的元估计器”。

据我们所知,引导聚合本质上有四种形式:装袋、粘贴、随机子空间和随机补丁。在 BaggingClassifier 中,我们通过操作 BaggingClassifier 11 个参数中的 4 个来激活这四种风格,即:bootstrap_features(True/False), bootstrap(正确/错误)、max_features (=1/<1) 和 max_samples (=1/<1)。

在 sklearn 中,要将 BaggingClassifierRandomForestClassifier 一起使用,我们需要:

clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)

事实证明,RandomForestClassifier的17个参数中,有两个与BaggingClassifier相同:bootstrap最大特征。虽然 bootstrap 对于 BaggingClassifierRandomForestClassifier 来说是相同的(即带/不带替换的采样),但我不确定 最大特征。在 BaggingClassifier 中,max_features 是“从 X 中抽取进行训练的特征数量”,在本例中为 RandomForestClassifier。而在 RandomForestClassifier 中,它是“寻找最佳分割时要考虑的特征数量”。

最后,这给我带来了一个问题:我们如何协调这两个分类器中的这些参数,以便我们可以在随机森林中的每棵树中获得四种风格的引导聚合?我不只是问这样的东西是否可以作为糊状味道:

clf=BaggingClassifier(RandomForestClassifier(bootstrap = False, max_features = 1.0),
   bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )

我真的很想真正了解当 BaggingClassifier 调用 RandomForestClassifier 并将所有这些参数调整为不同值时幕后发生的情况。

最佳答案

随机森林参数和集成分类器参数之间不存在冲突。随机森林之所以有相似的参数(顺便说一句,max_features两者是相同的,只是表述方式不同)是因为随机森林本身是一个Ensemble算法。

因此,您在这里想要实现的是一个集成分类器的集成,其中每个分类器都有自己的参数。如果我稍微改变一下你的例子以使其更容易理解,我们有:

BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, max_features = 0.5), n_estimators = 5,
   bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )

它是这样工作的:

  • 首先,EnsembleClassifier 会获取所有特征(由 bootstrap_features = False, max_features = 1.0 给出)并抽取样本的 60% (max_samples = 0.6)无需替换 (bootstrap = False)
  • 然后它将所有特征和 60% 的样本提供给随机森林
    • 随机森林选择上一步中 Ensemble 传递的 50% 的无替换特征 (max_features = 0.5)(在我们的例子中,都是特征),并进行引导采样(有替换)由集成分类器通过的 60% 样本。在此基础上,它训练决策树并重复此过程 n_estimators = 100 次,并使用新功能和新引导

集成分类器会重复此操作 n_estimators = 5 次。

希望这有帮助!

TLDR:您传递给 RandomForestClassifierEnsembleClassifier 的参数可能具有相同的名称,并且实际上执行相同的操作,它们在训练过程的不同阶段执行,如果您在其中一个中设置 bootstrap = False,则不会将此参数值传递给另一个。

关于scikit-learn - 其他参数中的参数 - 在集成学习中使用带有随机森林的引导聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487151/

相关文章:

python - 如何为 DNA 序列生成一个热编码?

python - 在 AWS SageMaker 中调用 Scikit Learn 模型的端点

r - 在 R 中使用 randomForest 包进行预测

python - 防止随机森林回归器中数据泄漏的建议

python - 是否可以在 sklearn.ensemble 中使用不同的分类器?

r - randomForest、randomForestSRC 或 cforest 中单棵树的重要性可变吗?

machine-learning - 如何查看sklearn ensemble中adaboost分类器每个基本估计器的预测

python - 如何将 sklearn CountVectorizer 与 'word' 和 'char' 分析器一起使用? - Python

keras - 这是 sklearn 分类报告对多标签分类报告的正确使用吗?

python - GridSearchCV 随机森林回归器调整最佳参数