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,它通常要快得多。
编辑 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,它通常要快得多。