假设我决定使用集成方法 - 如果它有所作为,我们将使用 iris 数据集。在可用的集成技术中,我们将重点关注并行方法,并从中使用 sklearn 进行引导聚合。
Sklearn 使用 BaggingClassifier
实现引导聚合,(文档告诉我们)它是“适合基分类器的集成元估计器……”在这些基分类器中,让我们选择 RandomForestClassifier
,它本身就是“一个适合许多决策树分类器的元估计器”。
据我们所知,引导聚合本质上有四种形式:装袋、粘贴、随机子空间和随机补丁。在 BaggingClassifier
中,我们通过操作 BaggingClassifier
11 个参数中的 4 个来激活这四种风格,即:bootstrap_features
(True/False), bootstrap
(正确/错误)、max_features
(=1/<1) 和 max_samples
(=1/<1)。
在 sklearn 中,要将 BaggingClassifier
与 RandomForestClassifier
一起使用,我们需要:
clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)
事实证明,RandomForestClassifier
的17个参数中,有两个与BaggingClassifier
相同:bootstrap
和最大特征
。虽然 bootstrap
对于 BaggingClassifier
和 RandomForestClassifier
来说是相同的(即带/不带替换的采样),但我不确定 最大特征
。在 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
次,并使用新功能和新引导
- 随机森林选择上一步中 Ensemble 传递的 50% 的无替换特征 (
集成分类器会重复此操作 n_estimators = 5
次。
希望这有帮助!
TLDR:您传递给 RandomForestClassifier
和 EnsembleClassifier
的参数可能具有相同的名称,并且实际上执行相同的操作,它们在训练过程的不同阶段执行,如果您在其中一个中设置 bootstrap = False
,则不会将此参数值传递给另一个。
关于scikit-learn - 其他参数中的参数 - 在集成学习中使用带有随机森林的引导聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487151/