其他参数中的参数-在集成学习中将引导聚合与随机森林一起使用

时间:2019-02-01 21:06:59

标签: scikit-learn random-forest ensemble-learning

假设我决定使用整体方法-如果有区别,我们将使用虹膜数据集。在可用的集成技术中,我们将重点介绍并行方法,并从中使用sklearn进行引导聚合。

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

有人告诉我们,引导程序聚合基本上有四种形式:装袋,粘贴,随机子空间和随机补丁。在BaggingClassifier中,我们通过操纵bootstrap_features的11个参数中的4个来激活这四种风味,分别是:bootstrap(对/错),max_features(对/错),max_samples(= 1 / <1)和BaggingClassifier(= 1 / <1)。

在sklearn中,要将RandomForestClassifierclf = BaggingClassifier(RandomForestClassifier(parameters), parameters)一起使用,我们需要:

RandomForestClassifier

证明BaggingClassifier的17个参数中,有两个与bootstrap的参数相同:max_featuresbootstrap。尽管BaggingClassifierRandomForestClassifier的{​​{1}}是相同的(即,有/无替换采样),但我不确定max_features。在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并将所有这些参数都调整为不同值时发生的情况。

1 个答案:

答案 0 :(得分:3)

“随机森林”参数和“合奏分类器”参数之间没有冲突。随机森林具有相似参数(btw,max_features两者相同,只是用不同的方式表达)的原因是因为随机森林本身是一种Ensemble算法。

因此,您在这里想要实现的是Ensemble of 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%的样本提供给RandomForest
    • “随机森林”选择Ensemble在上一步中传递的50%的特征而不进行替换(max_features = 0.5)(在我们的示例中为所有特征),并进行引导抽样(替换)整体分类器通过的60%样本。基于此,它将训练决策树并使用新功能和新引导程序n_estimators = 100重复此过程

Ensemble分类器重复n_estimators = 5次。

希望这会有所帮助!

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