如何获取决策树中的所有基尼指数?
Posted
技术标签:
【中文标题】如何获取决策树中的所有基尼指数?【英文标题】:How do I get all Gini indices in my decision tree? 【发布时间】:2019-05-10 23:12:05 【问题描述】:我使用 sklearn 制作了一个决策树,在这里,在 SciKit 学习 DL 包下,即。 sklearn.tree.DecisionTreeClassifier().fit(x,y)
。
如何在每一步获取所有可能节点的基尼指数? graphviz
只给我基尼指数最低的节点的基尼指数,即用于拆分的节点。
例如,下图(来自graphviz
)告诉我 Pclass_lowVMid 右指数的基尼指数为 0.408,但不是 Pclass_lower 或 Sex_male 在该步骤的基尼指数。我只知道 Pclass_lower 和 Sex_male 的基尼指数必须大于 (0.408*0.7 + 0) 但仅此而已。
【问题讨论】:
【参考方案1】:使用export_graphviz
显示所有节点的杂质,至少在版本0.20.1
中。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from graphviz import Source
data = load_iris()
X, y = data.data, data.target
clf = DecisionTreeClassifier(max_depth=2, random_state=42)
clf.fit(X, y)
graph = Source(export_graphviz(clf, out_file=None, feature_names=data.feature_names))
graph.format = 'png'
graph.render('dt', view=True);
所有节点的杂质值也可以在tree
的impurity
属性中访问。
clf.tree_.impurity
array([0.66666667, 0. , 0.5 , 0.16803841, 0.04253308])
【讨论】:
【参考方案2】:pclass节点的基尼指数=左节点的基尼指数*(左节点的样本数/左节点的样本数+右节点的样本数)+右节点的基尼指数*(个数左节点的样本数/左节点的样本数 + 右节点的样本数) 所以就在这里
Gini index of pclass = 0 + .408 *(7/10) = 0.2856
【讨论】:
或许,0.408(?) 对不起,我是在手机上,所以有很多错字。 你是对的。糟糕的是它的 0.408 不是 0.48。我已经纠正了。希望你我理解正确。 哦,我在输入问题时也打错了哈哈。实际上,我知道那个公式并且知道如何手动获取索引。我希望 scikitlearn 可以为我做这件事哈哈。以上是关于如何获取决策树中的所有基尼指数?的主要内容,如果未能解决你的问题,请参考以下文章