提问者:小点点

如何解释决策树


在理解scikit learn的决策树结果时,我有两个问题。例如,这是我的一个决策树:

第一个问题是:如果一个样本满足条件,那么它会转到LEFT分支(如果存在),否则它会转右。在我的例子中,如果一个样本带有X[7]

第二个问题是:当样本到达叶节点时,我如何知道它属于哪个类别?在这个例子中,我有三个类别要分类。在红色框中,分别有91、212和113个样品满足条件。但是我怎样才能确定类别呢?我知道有一个函数clf。预测(样本)以说明类别。我能从图表上看出来吗???非常感谢。


共3个答案

匿名用户

每个框中的value行告诉您该节点上按顺序属于每个类别的样本数。这就是为什么,在每个框中,value中的数字加起来等于lab中显示的数字。例如,在你的红盒子里,91 212 113=416。所以这意味着如果你到达这个节点,类别1中有91个数据点,类别2中有212个,类别3中有113个。

如果您要预测到达决策树中该叶子的新数据点的结果,您将预测类别2,因为这是该节点上样本最常见的类别。

匿名用户

第一个问题:是的,你的逻辑是正确的。左节点为True,右节点为False。这可能与直觉相反;true可以等同于较小的样本。

第二个问题:这个问题最好通过将树可视化为带有pydotplus的图形来解决。tree.export_graphviz()的class_names属性将向每个节点的多数类添加一个类声明。代码在iPython笔记本中执行。

from sklearn.datasets import load_iris  
from sklearn import tree  
iris = load_iris()  
clf2 = tree.DecisionTreeClassifier()  
clf2 = clf2.fit(iris.data, iris.target)  

with open("iris.dot", 'w') as f:  
    f = tree.export_graphviz(clf, out_file=f)  
    
import os  
os.unlink('iris.dot')  

import pydotplus  
dot_data = tree.export_graphviz(clf2, out_file=None)  
graph2 = pydotplus.graph_from_dot_data(dot_data)  
graph2.write_pdf("iris.pdf")  

from IPython.display import Image  
dot_data = tree.export_graphviz(clf2, out_file=None,  
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  # leaves_parallel=True, 
                     special_characters=True)  
graph2 = pydotplus.graph_from_dot_data(dot_data)

## Color of nodes
nodes = graph2.get_node_list()

for node in nodes:
    if node.get_label():
        values = [int(ii) for ii in node.get_label().split('value = [')[1].split(']')[0].split(',')];
        color = {0: [255,255,224], 1: [255,224,255], 2: [224,255,255],}
        values = color[values.index(max(values))]; # print(values)
        color = '#{:02x}{:02x}{:02x}'.format(values[0], values[1], values[2]); # print(color)
        node.set_fillcolor(color )
#

Image(graph2.create_png() ) 

至于在叶上确定类,您的示例没有像iris数据集那样具有单个类的叶。这是常见的,可能需要过度拟合模型才能获得这样的结果。类的离散分布是许多交叉验证模型的最佳结果。

匿名用户

根据《学习scikit learn:Python中的机器学习》一书,决策树表示基于训练数据的一系列决策。

!(http://i.imgur.com/vM9fJLy.png)

要对实例进行分类,我们应该在每个节点上回答这个问题。例如,性是什么