Как получить все индексы Джини в моем дереве решений? - PullRequest
0 голосов
/ 10 декабря 2018

Я принял дерево решений, используя 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), но это все.

decision tree

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Использование 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);

enter image description here

Значения примесей для всех узлов также доступны в атрибуте impurity tree.

clf.tree_.impurity
array([0.66666667, 0.        , 0.5       , 0.16803841, 0.04253308])
0 голосов
/ 10 декабря 2018

индекс Джини узла pclass = индекс Джини левого узла * (количество выборок в левом узле / количество выборок в левом узле + количество выборок в правом узле) + индекс Джини правого узла * (номерсэмплы в левом узле / № сэмплов на левом узле + № сэмплов на правом узле) Так что здесь это будет

Gini index of pclass = 0 + .408 *(7/10) = 0.2856
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...