scikit-learn RandomForestClassifier - 如何解释树输出?

Posted

技术标签:

【中文标题】scikit-learn RandomForestClassifier - 如何解释树输出?【英文标题】:scikit-learn RandomForestClassifier - How to interpret tree output? 【发布时间】:2015-08-17 14:02:56 【问题描述】:

我有以下代码,但我只是不明白如何解释来自 RandomForestClassifier 的树输出数据,例如如何计算 gini、给定样本以及“值”列表中的总数如何更高比初始样本 3.

我将此输出与我可以理解和解释的 DecisionTreeClassifier 进行比较。

感谢任何帮助,谢谢!

from sklearn.ensemble import RandomForestClassifier
from sklearn import tree
import numpy as np
from sklearn.externals.six import StringIO  
import pydot 

# Data
X = np.array([[0, 0],
              [0, 1],
              [1, 0],
              [1, 1]])
Y = np.array([0, 1, 1, 0])

# Create object classifiers
clf = RandomForestClassifier()
clf_tree = tree.DecisionTreeClassifier()

# Fit data
clf_tree.fit(X,Y)
clf.fit(X, Y)

# Save data
dot_data = StringIO()
tree.export_graphviz(clf_tree, out_file = dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("orig_tree.pdf")

i_tree = 0
for tree_in_forest in clf.estimators_:    
    dot_data = StringIO()
    tree.export_graphviz(tree_in_forest, out_file = dot_data)
    graph = pydot.graph_from_dot_data(dot_data.getvalue())
    f_name = 'tree_' + str(i_tree) + '.pdf'
    graph.write_pdf(f_name) 
    i_tree += 1

决策树: http://i.stack.imgur.com/XZ7vU.png

来自 RandomForestClassifier 的树: http://i.stack.imgur.com/Bb5t9.png

【问题讨论】:

我查看了链接,这就是为什么我包含一个普通决策树作为比较,它与 RandomForestClassifier 中使用的类相同。在我上面的示例中,来自 RandomForestClassifier 的树中的节点并不多,而且输入样本很小,因此应该很容易计算出树中的数字是如何派生的,就像在 DecisionTreeClassifier 中一样。看看图片链接,你就会明白我是从哪里来的。 【参考方案1】:

在给定样本的情况下如何计算基尼系数?

gini 的计算方式与随机森林和决策树完全相同。 Gini 值或方差对应于节点的杂质。

“值”列表中的总数如何高于初始样本 3?

在分类的情况下,value属性对应到达叶子的样本数。

在随机森林的情况下,样本是自举的,因此总共平均有原始样本的 2 / 3,但样本总数没有变化。

【讨论】:

抱歉,您能否从 RandomForestClassifier 的树中显示第一个节点的 gini 为 0.375 的情况? 对于给定树结构和引导采样的第一个节点,您有 3 个正样本和 1 个负样本。因此,基尼系数由 gini = 3 / 4 * 1 / 4 + 1 / 4 * 3 / 4 = 0.375 给出,这是每个类别的方差之和。

以上是关于scikit-learn RandomForestClassifier - 如何解释树输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 python 输出 RandomForest 分类器?

scikit-learn随机森林调参小结

转载:scikit-learn随机森林调参小结

使用 scikit-learn 并行生成随机森林

如何在 scikit-learn 的随机森林的 graphviz-graph 中找到一个类?

在 Python Scikit-Learn 中训练测试拆分得分高但 CV 得分低