假设我决定使用集成方法--如果它有区别,我们将使用虹膜数据集。在现有的集成技术中,我们将侧重于并行方法,从这些方法中,我们将使用sklearn进行引导聚合。
Sklearn通过使用BaggingClassifier实现引导聚合,这(文档告诉我们)是“适合基本分类器…的集成元估计器”。在这些基本分类器中,让我们选择RandomForestClassifier,它本身就是“一个适合许多决策树分类器的元估计器”。
引导聚合,我们被告知,本质上有四种形式:包装,粘贴,随机子空间和随机补丁。在BaggingClassifier中,我们通过操纵BaggingClassifier的11个参数中的4个,即bootstrap_features (真/假)、bootstrap (真/假)、max_features (=1/<1)和max_samples (=1/<1)来激活这四种口味。
在sklearn中,要将BaggingClassifier与RandomForestClassifier结合使用,我们需要:
clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)结果表明,在RandomForestClassifier的17个参数中,两个参数与BaggingClassifier的参数相同:bootstrap和max_features。虽然bootstrap对BaggingClassifier和RandomForestClassifier都是一样的(也就是说,有/没有替换),但对于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时,所有这些参数都调到了不同的值,我真的在努力理解场景背后发生了什么。
发布于 2019-02-02 00:41:51
随机森林参数与集成分类器参数之间没有冲突。随机森林具有相似的参数(顺便说一句,max_features是相同的,只是用不同的方式表达)的原因是随机森林本身是一种集成算法。
因此,您在这里试图实现的是集成分类器的集合,其中每个分类器都有自己的参数。如果我稍微更改了您的示例,使其更容易理解,我们有:
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 )这就是它的工作方式:
bootstrap_features = False, max_features = 1.0提供的),并提取60% (max_samples = 0.6)的样本,而不需要替换(bootstrap = False)。max_features = 0.5)通过集成在上一步(在我们的情况下,都是特征),并做了一个自举抽样(与替换) 60%的样本通过集成分类器。在此基础上,它通过新的特性和新的引导来训练决策树并重复此过程的n_estimators = 100时间。
这是由集成分类器重复的n_estimators = 5时间。
希望这能有所帮助!
TLDR:您传递给RandomForestClassifier和EnsembleClassifier的参数可能具有相同的名称,并且实际上执行相同的操作,它们在培训过程的不同阶段都会这样做,如果您将bootstrap = False设置在一个中,它将不会将这个参数值传递给另一个。
https://stackoverflow.com/questions/54487151
复制相似问题