如何在决策树中获取所有基尼系数?

时间:2018-12-10 03:29:55

标签: python machine-learning scikit-learn decision-tree

我已经使用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),但是仅此而已。

decision tree

2 个答案:

答案 0 :(得分:1)

pclass节点的基尼索引=左节点的基尼索引*(左节点的样本数/左节点的样本数+右节点的样本数)+右节点的基尼索引*(左节点中的样本数/左节点中的样本数+右节点中的样本数) 所以这里会

Gini index of pclass = 0 + .408 *(7/10) = 0.2856

答案 1 :(得分:1)

至少在版本0.20.1中,使用export_graphviz显示所有节点的杂质。

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

enter image description here

还可以在impurity的{​​{1}}属性中访问所有节点的杂质值。

tree