如何获取决策树中的所有基尼指数?

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);

所有节点的杂质值也可以在treeimpurity 属性中访问。

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 可以为我做这件事哈哈。

以上是关于如何获取决策树中的所有基尼指数?的主要内容,如果未能解决你的问题,请参考以下文章

决策树中的熵和基尼指数

使用基尼指数的决策树

CART决策树----基尼指数划分

决策树系列三——基尼指数,减枝和

如何在决策树中获取特征重要性?

如何在 pyspark 中可视化决策树模型/对象?