我已经使用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),但仅此而已。
发布于 2018-12-11 04:19:54
使用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])
发布于 2018-12-10 11:43:40
pclass节点的基尼指数=左节点的基尼指数* (no.左侧节点的样本数/编号左侧节点上的样本+编号。右节点的样本数)+右节点的基尼指数*(否左侧节点的样本数/编号左侧节点上的样本+编号。右节点上的样本),所以这里将是
Gini index of pclass = 0 + .408 *(7/10) = 0.2856
https://stackoverflow.com/questions/53699121
复制相似问题