在决策树下面:

python - 可视化决策树:IndexError:列表索引超出范围-LMLPHP

使用代码生成:

dt = DecisionTreeClassifier()
dt = clf.fit([[1],[2],[3]], [[3],[2],[3]])

dot_data = export_graphviz(dt, out_file=None,
                         feature_names=['1' , '2' , '3'],
                         class_names=['true' , 'false'],
                         filled=True, rounded=True,
                         special_characters=True)
graph = graphviz.Source(dot_data)
graph


如果我改用:

dt = DecisionTreeClassifier()
dt = clf.fit([[1],[2],[3]], [[2],[3],[4]])

dot_data = export_graphviz(dt, out_file=None,
                         feature_names=['1' , '2', '3'],
                         class_names=['true' , 'false'],
                         filled=True, rounded=True,
                         special_characters=True)
graph = graphviz.Source(dot_data)
graph


返回错误:

/usr/local/lib/python3.5/dist-packages/sklearn/tree/export.py in node_to_str(tree, node_id, criterion)
    284                 node_string += 'class = '
    285             if class_names is not True:
--> 286                 class_name = class_names[np.argmax(value)]
    287             else:
    288                 class_name = "y%s%s%s" % (characters[1],

IndexError: list index out of range


当分类器正确训练时,这是否是可视化的怪癖?

最佳答案

我认为您的代码中有一个错字。您正在使用clf.fit,而应为dt.fit

其次,在第二个实例中,您指定了三个标签,即['2','3','4'],而您将类标签仅指定为truefalse,这是错误的,因为您显然使用了两个以上的标签,并且不能将大小为2的数组(类名)映射为大小为3的数组(您的实际标签)。因此,基本上,您需要添加truefalse之外的其他标签,它应该可以正常工作。

dt = DecisionTreeClassifier()
dt = dt.fit([[1],[2],[3]], [[2],[3],[4]])   #It should be dt.fit not clf.fit

dot_data = export_graphviz(dt, out_file=None,
                     feature_names=['1' , '2', '3','4'],
                     class_names=['true' , 'false','something_else'],
                     filled=True, rounded=True,
                     special_characters=True)


现在它应该可以正常工作了。随意命名第三个标签。由于您没有为第三个标签指定任何内容,因此基本上发生了错误,因此它无法将实际标签(即234)映射到您在class_names中指定的标签,即和true

关于python - 可视化决策树:IndexError:列表索引超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46372488/

10-12 22:05