AttributeError: 'list' 对象没有属性 'create_png'

Anu*_*A S 3 machine-learning graphviz decision-tree python-3.x pydot

这将数据分类为决策树。决策树已创建,但我无法查看决策树。

import numpy as np
from sklearn import linear_model, datasets, tree
import matplotlib.pyplot as plt
iris = datasets.load_iris()
f = open('decision_tree_data.txt')
x_train = []
y_train = []
for line in f:
    line = np.asarray(line.split(),dtype = np.float32)
    x_train.append(line[:-1])
    y_train.append(line[:-1])
x_train = np.asmatrix(x_train)
y_train = np.asmatrix(y_train)
model = tree.DecisionTreeClassifier()
model.fit(x_train,y_train)
from sklearn.externals.six import StringIO
import pydot
from IPython.display import Image
dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data,  
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)  
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
Image(graph.create_png())
Run Code Online (Sandbox Code Playgroud)

Ioa*_*dis 7

该函数pydot.graph_from_dot_data 返回一个list inpydot >= 1.2.0(与 的早期版本相反pydot)。

原因是为了同质化输出,过去是list如果返回两个图,但如果返回单个图则为图。这种分支是用户代码中常见的错误来源(简单优于复杂 [ PEP 20 ])。

此更改适用于调用该函数的所有函数,dot_parser.parse_dot_data现在该函数在所有情况下都返回alist

要解决该错误,您需要解压缩您期望的单个图形:

(graph,) = pydot.graph_from_dot_data(dot_data.getvalue())
Run Code Online (Sandbox Code Playgroud)

此语句还断言返回单个图形。所以如果这个假设不成立,并且返回更多的图,这个解包会抓住它。相比之下,graph = (...)[0]不会。

相关pydot问题: