我正在使用 scikit learn 构建一个随机森林分类器。我听说有可能从随机森林构建单个决策树。建议是,尽管决策树可能不如随机森林分类器那么好,但它可能比使用标准方法得到的决策树更好。
但是我一直无法在网上找到这种方法。它存在吗?
我的问题不是关于从随机森林中提取其中一个决策树。它正在询问一种从整个随机森林构建新决策树的方法,也许是通过以某种方式组合随机森林中的树。
我正在使用 scikit learn 构建一个随机森林分类器。我听说有可能从随机森林构建单个决策树。建议是,尽管决策树可能不如随机森林分类器那么好,但它可能比使用标准方法得到的决策树更好。
但是我一直无法在网上找到这种方法。它存在吗?
我的问题不是关于从随机森林中提取其中一个决策树。它正在询问一种从整个随机森林构建新决策树的方法,也许是通过以某种方式组合随机森林中的树。
RF 中的树和单个树使用相同的算法(通常是 CART)构建。唯一的细微差别是单个树在每次拆分时尝试所有预测变量,而 RF 中的树仅在每次拆分时尝试预测变量的随机子集(这会创建独立的树)。此外,RF 中的每棵树都建立在原始训练数据的引导样本上,而不是建立在完整的训练集上。这使得森林中的每棵树都成为数据空间某些领域的专家,而在其他领域则很糟糕。
因此,由于这些原因,从随机森林中提取一棵树以将其用作分类器是没有意义的。根据其专业领域,它可以为您提供比在完整数据集上使用 CART 构建的传统树更好的结果,或者更糟。让 RF 比单棵树好得多的事情是它会生长许多去相关的树并平均它们的输出。只有当专家委员会的成员足够多(通常在 200 到 2000 人之间)时,方差才会减小。但单独来说,RF 的每棵树都会比通过传统 CART 构建的单个树弱。
您当然可以从 RF 中提取一棵树,以了解森林中正在发生的事情(请参阅我在上面的评论中提供的链接)。只是不要将这棵树用作分类器。
也许您正在寻找的是Domingos 在 90 年代开发的组合多个模型(CMM) 方法。在他的 ICML 论文中描述了将其与 C4.5 规则集合一起使用的详细信息
多明戈斯,佩德罗。“通过多种模型从示例中获取知识。” 在第十四届机器学习国际会议论文集上。1997 年。
表 1 中的伪代码并非特定于 bagged C4.5,但是:

要将其应用于随机森林,关键问题似乎是如何生成随机生成的示例。这是一个笔记本,展示了一种使用.sklearn
这让我想知道在 CMM 上做了哪些后续工作,以及是否有人想出了更好的方法来生成。我在这里创建了一个关于它的新问题。
除了非常不可能的情况外,随机森林预测不能用一棵树来表示。这是因为他们在不同的假设类别中学习预测变量:随机森林在树的线性组合空间上学习预测变量,其中包括不是树的预测变量。换一种说法——森林在树木空间的范围内学习预测因子。
也就是说,希望存在一棵可以很好地近似森林预测器的树。找到这棵树的一种快速而肮脏的方法是将一棵树拟合到森林的预测中。其预测的质量将取决于从最佳森林预测器到其最佳树近似值的“距离”。
看起来您正在寻求解决两个问题 - 1. 可解释性和 2. 预测效率。正如上面评论中已经提到的,您可以在 Python 中提取变量重要性,以便解决第 1 点。
针对第 2 点,如果您关心效率到微秒级,那么您可能需要探索其他算法,例如逻辑回归,并将样本外性能与随机森林生成的性能进行比较;如果性能几乎相同,但逻辑回归要快得多,那么您可以决定使用逻辑回归。
如果您打算使用随机森林,简短的回答是,从技术上讲,您可以通过设置 ntree=1 来构建一棵随机树,它可能会产生一个不错的预测,但一组树会比一棵树好得多。因此,仅从树的子集构建一棵树是没有意义的,除非您愿意以样本外的性能换取效率。
此外,您还可以通过仅在最终预测中使用树的子集将预测速度提高 10 倍或更多。如果您训练 1500 棵树,那么您可以选择对最终预测贡献最大的子集。我正在考虑类似于图书馆模型中的合奏选择的东西,其中森林中的每棵树都将成为合奏中的模型。