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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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