AttributeError: ‘list’ 对象没有属性 ‘create_png’

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

import numpy as npfrom sklearn import linear_model, datasets, treeimport matplotlib.pyplot as pltiris = 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 StringIOimport pydotfrom IPython.display import Imagedot_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())

回答:

函数 pydot.graph_from_dot_data 返回 一个 list pydot >= 1.2.0(与早期版本的 pydot 不同)。

这样做的原因是为了统一输出,以前如果返回两个图形,则输出为 list,但如果返回单个图形,则输出为图形。这种分支是用户代码中常见的错误来源(简单胜过复杂 [PEP 20])。

这一变化适用于所有调用函数 dot_parser.parse_dot_data 的函数,现在在所有情况下都返回 一个 list

为了解决此错误,你需要解包你期望的单个图形:

graph, = pydot.graph_from_dot_data(dot_data.getvalue())

这个语句还断言返回的是单个图形。因此,如果这个假设不成立,并且返回了更多的图形,这种解包将会捕捉到这一点。相比之下,graph = (...)[0] 则不会。

相关的 pydot 问题:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注