这将数据分类为决策树。决策树已经创建,但我无法查看决策树。
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
问题: