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

Tho*_*ber 6 random-forest scikit-learn

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

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

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

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

Irm*_*rer 2

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

然后它为每个集合拟合一个决策树。然而,常规决策树在每一步所做的是循环每个特征,找到每个特征的最佳分割,并最终选择在产生所有特征中最好的特征中进行分割。在随机森林中,您不必循环遍历每个特征来找到最佳分割,而是仅在每个步骤中尝试随机子样本(默认为 sqrt(n_features))。

因此,随机森林中的每棵树都适合自举随机训练集。在每个分支步骤中,它只查看特征的子样本,因此某些分支会很好,但不一定是理想的分割。这意味着每棵树与原始数据的拟合不太理想。然而,当你对所有这些(次理想)树的结果进行平均时,你会得到一个可靠的预测。常规决策树过度拟合数据,这种双向随机化(装袋和特征子采样)使它们能够泛化,而森林通常可以做得很好。

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

您可以做两件事。

1)正如RPresle提到的,您可以查看.feature_importances_属性,该属性对于每个特征平均来自不同树的分割分数。这个想法是,虽然你无法获得平均的树,但你可以通过平均每棵树的得分来量化每个特征在森林中的使用程度和效率。

2)当我拟合随机森林模型并需要深入了解正在发生的事情以及特征如何影响结果时,我还拟合单个决策树。现在,这个模型本身通常一点都不好,它很容易被随机森林超越,我不会用它来预测任何东西,而是通过绘制和查看这棵树中的分裂,结合森林的.feature_importances_分裂,我通常对大局有一个很好的了解。