Scikit学习+随机森林 - 单树的特征

时间:2014-05-09 11:53:24

标签: scikit-learn random-forest similarity

关于随机森林及其在scikit中的实施,我有一个非常具体的问题。 我建造了一个森林,到目前为止,预测工作得很好。但是,在安装森林之后,我需要知道哪些特定特征最终会出现在单树的叶子中。

我已经理解了层次结构,随机林构建单个决策树,我可以通过"估算器_"属性,并且在每个决策树下有一个"树_"属性。在这个树中,我找到了有关特定节点,叶子和分裂的信息,但是我无法找到哪些特定特征最终在叶子中,或者甚至哪些特征被分配给该特定树? / p>

只是为了澄清我不打算手动分析树节点,但我希望有一个相似性度量,基于一组特征在树的叶子中结束的频率。

非常感谢!

P.S。为了防止有人感兴趣,我从这篇论文中得到了这个相似性度量的想法: http://www.sciencedirect.com/science/article/pii/S1053811912009834

编辑:好的,我还有更进一步。显然,Ensemble有一种方法,即找到X中每个样本的终端区域(=叶子节点)。"这可以在这里找到(第2465行) https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_tree.pyx

我已经摆弄,但无法完全理解代码。我可以制作rf.apply(np.array([i,j])),其中i,j是用于拟合模型的2D矩阵中的样本编号,它返回它所在的叶子。好极了!但唯一奇怪的是我可以使用比实际样本更大的数字吗?如果索引是大的,或者我做错了什么,它是否假设最后一个样本?

出于测试目的,我制作了一个10x5矩阵,但我可以索引rf.apply(np.array([500,2333]))而没有错误?

很抱歉,但我不完全确定如何向此功能提供数据。

1 个答案:

答案 0 :(得分:0)

您可以按照how extraction decision rules of random forest in python中的说明提取Python中的决策节点。然后可以遍历树木,检查导致每片叶子的特征。