graphviz在决策树的每个节点内呈现的值是什么意思?

Q.H*_*.H. 3 python scipy pygraphviz scikit-learn

在此处输入图片说明

对于上面的图像,使用的AdaBoostClassifier库scipygraphviz我能够创建此子树视觉效果,我需要帮助来解释每个节点中的值吗?例如,“ gini”是什么意思?“样本”和“值”字段的意义是什么?属性F5 <= 0.5是什么意思?

这是我的代码(我在jupyter笔记本中全部完成了此操作):

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline

f = open('dtree-data.txt')
d = dict()
for i in range(1,9):
    key = 'F' + str(i)
    d[key] = []
d['RES'] = []
for line in f:
    values = [(True if x == 'True' else False) for x in line.split()[:8]]
    result = line.split()[8]
    d['RES'].append(result)
    for i in range(1, 9):
        key = 'F' + str(i)
        d[key].append(values[i-1])
df = pd.DataFrame(data=d, columns=['F1','F2','F3','F4','F5','F6','F7','F8','RES'])

from sklearn.model_selection import train_test_split

X = df.drop('RES', axis=1)
y = df['RES']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier()
ada.fit(X_train, y_train)

from IPython.display import Image
from sklearn.externals.six import StringIO
from sklearn.tree import export_graphviz
import pydot

# /sf/ask/3233444441/ 

sub_tree = ada.estimators_[0]
dot_data = StringIO()
features = list(df.columns[1:])
export_graphviz(sub_tree, out_file=dot_data,feature_names=features,filled=True,rounded=True)
graph = pydot.graph_from_dot_data(dot_data.getvalue())  
Image(graph[0].create_png())
Run Code Online (Sandbox Code Playgroud)

注意:可能需要安装外部软件包才能在本地查看数据(显然)

这是数据文件的链接:https : //cs.rit.edu/~jro/courses/intelSys/dtree-data

kaz*_*ase 8

您会看到决策树。那是一个二叉树,其中每个节点代表数据的一部分。不是叶的每个节点将其数据部分分为两个子部分。根节点包含所有数据(来自训练集)。此外,这是分类树。它预测类概率-节点值。

根节点:

  • samples = 134这意味着该节点“包含” 134个样本。因为它是根节点,这意味着该树已接受134个样本的训练。
  • value = [0.373, 0.627]是类的概率。大约1/3的样本属于A类,而2/3的样本属于B类。
  • gini = 0.468是节点的基尼杂质。它描述了多少类混合在一起。
  • F5 <= 0.5数据的列名是什么?对。这意味着将节点拆分,以使特征F5低于0.5的所有样本进入左子节点,特征高于0.5的样本进入右子节点。

叶节点:

  • 这些节点没有进一步拆分,因此不需要F <= something字段。
  • samples = 90/ 44总和为134。90个样本分配给左孩子,44个样本分配给右孩子。
  • values = [0.104, 0.567]/ [0.269, 0.06]是孩子中的上课概率。左孩子中的大多数样本属于B类(0.56 vs 0.10),而右孩子中的大多数样本属于A类(0.27 v 0.06)。
  • gini = 0.263/ 0.298是子节点中剩余的杂质。它们低于父节点中的值,这意味着这些类之间的拆分提高了可分离性,但是仍然存在一些不确定性。