Scikit Learn 随机森林分类器:如何根据树数生成 OOB 误差图

Scikit Learn Random forest classifier: How to produce a plot of OOB error against number of trees


编辑 2: 现在在 sklearn documentation 中有一个很好的例子。


为了查看我的森林中需要多少棵树,我想随着森林中使用的树木数量的增加绘制 OOB 错误。我在 Python 中使用 sklearn.ensemble.RandomForestClassifier,但我找不到如何使用森林中的树木子集进行预测。我可以通过在每次迭代中创建一个新的随机森林来实现这一点,同时增加树的数量,但这太昂贵了。

使用 staged_decision_function 方法的梯度提升对象似乎可以完成类似的任务。参见 this example

这在 R 中是一个非常简单的过程,只需调用 plot(randomForestObject) 即可实现:


--编辑-- 我现在看到 RandomForestClassifier 对象有一个属性 estimators_,它 returns 列表中的所有 DecisionTreeClassifier 对象。因此,为了解决这个问题,我可以遍历该列表,预测每棵树的结果并取 'cumulative average'。但是,真的没有更简单的方法来做到这一点吗?

本期有讨论和代码: https://github.com/scikit-learn/scikit-learn/issues/4273

您可以像这样一棵一棵地添加树:

n_estimators = 100
forest = RandomForestClassifier(warm_start=True, oob_score=True)

for i in range(1, n_estimators + 1):
    forest.set_params(n_estimators=i)
    forest.fit(X, y)
    print i, forest.oob_score_

您提出的解决方案还需要获取每棵树的 oob 索引,因为您不想计算所有训练数据的分数。

我仍然觉得这是一件奇怪的事情,因为森林中的树木确实没有自然排列。 你能解释一下你的用例是什么吗?你想找到给定精度的最小树数以减少预测时间吗?如果你想要更快的预测时间,我建议使用 GradientBoostingClassifier,它通常要快得多。