Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

graph.write_pdf("iris.pdf") AttributeError: 'list' object has no attribute 'write_pdf'

My code is follow the class of machine learning of google.The two code are same.I don't know why it show error.May be the type of variable is error.But google's code is same to me.Who has ever had this problem?

This is error

[0 1 2] [0 1 2] Traceback (most recent call last):   File "/media/joyce/oreo/python/machine_learn/VisualizingADecisionTree.py", line 34, in <module>     graph.write_pdf("iris.pdf") AttributeError: 'list' object has no attribute 'write_pdf' [Finished in 0.4s with exit code 1] [shell_cmd: python -u "/media/joyce/oreo/python/machine_learn/VisualizingADecisionTree.py"] [dir: /media/joyce/oreo/python/machine_learn] [path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games] 

This is code

import numpy as np from sklearn.datasets import load_iris from sklearn import tree  iris = load_iris() test_idx = [0, 50, 100]  # training data train_target = np.delete(iris.target, test_idx) train_data = np.delete(iris.data, test_idx, axis=0)  # testing data test_target = iris.target[test_idx] test_data = iris.data[test_idx]  clf = tree.DecisionTreeClassifier() clf.fit(train_data, train_target)  print test_target print clf.predict(test_data)   # viz code from sklearn.externals.six import StringIO import pydot dot_data = StringIO() tree.export_graphviz(clf,         out_file=dot_data,         feature_names=iris.feature_names,         class_names=iris.target_names,         filled=True, rounded=True,         impurity=False)  graph = pydot.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("iris.pdf") 
like image 327
乔守卿 Avatar asked Jul 04 '16 03:07

乔守卿


2 Answers

I think you are using newer version of python. Please try with pydotplus.

import pydotplus ... graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("iris.pdf") 

This should do it.

like image 195
avellable Avatar answered Oct 12 '22 23:10

avellable


pydot.graph_from_dot_data() returns a list, so try:

graph = pydot.graph_from_dot_data(dot_data.getvalue()) graph[0].write_pdf("iris.pdf")  
like image 41
Iliyan Bobev Avatar answered Oct 13 '22 00:10

Iliyan Bobev