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 分类器?