如何将RandomForest折叠成等效的决策树?

时间:2015-06-25 13:47:44

标签: scikit-learn random-forest

我理解它的方式,在创建随机森林时,算法将一堆随机生成的决策树捆绑在一起,对它们进行加权,使它们适合训练数据。

说这个平均森林可以简化成一个简单的决策树是否合理?如果是这样 - 我如何访问和呈现这棵树?

我在这里要做的是提取树中的信息,以帮助识别主要属性,它们的边界值和树中的位置。我假设这样一棵树可以提供人类(或计算机启发式)的洞察力,以确定数据集中的哪些属性提供了确定目标结果的最大洞察力。

这似乎是一个天真的问题 - 如果是这样,请耐心等待,我是新手,想要进入一个我充分理解的阶段。

1 个答案:

答案 0 :(得分:2)

RandomForest使用bootstrap通过使用替换(装袋)对数据进行采样来创建许多训练集。每个自举集都非常接近原始数据,但略有不同,因为它可能具有一些点的倍数,并且原始数据中的一些其他点将丢失。 (这有助于创建一大堆相似但不同的集合,整体代表您的数据来自的人口,并允许更好的概括)

然后它适用于每个集合的DecisionTree。但是,常规DecisionTree在每个步骤中执行的操作是循环每个要素,找到每个要素的最佳拆分,最后选择在产生最佳要素的要素中进行拆分。在RandomForest中,您只需在每一步尝试随机子样本(默认为sqrt(n_features)),而不是遍历每个要素以找到最佳分割。

因此,RandomForest中的每棵树都适合自举随机训练集。并且在每个分支步骤中,它仅查看特征的子样本,因此一些分支将是好的但不一定是理想的分割。这意味着每棵树都不太适合原始数据。但是,当您对所有这些(次理想)树的结果进行平均时,您会得到一个强大的预测。常规DecisionTrees过度拟合数据,这种双向随机化(装袋和特征子采样)允许它们进行推广,森林通常做得很好。

这是一个问题:虽然你可以平均每棵树的输出,但你真的不能平均树木#34;获得平均树" 。由于树是一堆链接的if-then语句,因此无法获取这些链并产生一条链,该链产生的结果与每条链的平均结果相同。森林中的每棵树都是不同的,即使出现相同的特征,它们也会出现在树木的不同位置,这使得它无法结合。您不能将RandomForest表示为单个树。

你可以做两件事。

1)正如RPresle所提到的,您可以查看.feature_importances_属性,该属性针对每个要素平均来自不同树的分割得分。我们的想法是,虽然您无法获得平均树,但您可以通过平均每棵树的得分来量化森林中每个要素的使用量和效率。

2)当我适应RandomForest模型并需要深入了解发生了什么,功能如何影响结果时,我也适合单个DecisionTree。现在,这个模型本身通常都不是很好,它很容易被RandomForest超越,我不会用它来预测任何事情,但是通过绘制和查看这个树中的分裂,结合{在林中{1}},我通常对大局有了很好的了解。