我使用sklearn创建了一个决策树,这里在SciKit learn 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),仅此而已。
回答:
使用export_graphviz
可以显示所有节点的杂质,至少在版本0.20.1
中可以。
from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifier, export_graphvizfrom graphviz import Sourcedata = load_iris()X, y = data.data, data.targetclf = 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_.impurityarray([0.66666667, 0. , 0.5 , 0.16803841, 0.04253308])