sklearn random forest - 查看森林中各个决策树的子集

时间:2016-11-16 18:28:29

标签: python machine-learning scikit-learn random-forest data-science

我正在使用scikit-learn RandomForestRegressor,我正在为max_features设置一个显式值。当我这样做时,我希望对于森林中的每棵树,有一个随机的长度max_features特征子集,在构建树时会考虑(这是正确的还是从整个特征集执行特征子采样)对于每棵树的每个节点?)。我试图找出每棵树使用的功能子集。

以下是我现在所处位置的示例:

# initialize random forest with 10 trees of depth 2 (max 3 features), 
# with 10 randomly subset features selected per tree
rf = RandomForestRegressor(n_estimators=10, max_depth=2, max_features=10) 
forest = rf.fit(X,y) # fit the model

# get a list of individual DecisionTreeRegressor objects
trees = forest.estimators_ 

如果我想知道第一棵树中哪些功能使用,我想我可以做到以下几点:

[j for j,v in enumerate(trees[0].feature_importances_) if v > 0]

它给出了包含具有非零特征重要性的特征的列的位置。但是,这只给出了10个子采样特征中决策树选择的(最多)3个特征。据我所知,feature_importances_属性不区分使用但未选择的功能与未使用的功能。

我一直在查看源代码,但似乎无法找到DecisionTreeRegressor定义或_tree定义中完整功能集的子采样的位置。

非常感谢任何帮助。

更新

我一直在阅读源代码,我相信它是分割器类,它为每个节点拆分而不是每棵树进行特征采样,并将它们存储在splitter.features属性中。不幸的是,我找不到访问该属性的方法。

0 个答案:

没有答案