graph.write_pdf("iris.pdf")AttributeError:'list'对象没有属性'write_pdf'

乔守卿*_*乔守卿 45 python machine-learning graphviz pydot scikit-learn

我的代码是遵循谷歌的机器学习类.两个代码是相同的.我不知道为什么它显示错误.可能是变量的类型是错误.但谷歌的代码对我来说是相同的.谁有过这个问题?

这是错误的

[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]
Run Code Online (Sandbox Code Playgroud)

这是代码

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")
Run Code Online (Sandbox Code Playgroud)

ave*_*ble 66

我想你正在使用更新版本的python.请尝试使用pydotplus.

import pydotplus
...
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
Run Code Online (Sandbox Code Playgroud)

这应该做到这一点.

  • 我只是看看.图是一个列表,它包含一个pydot.Dot对象.我使用pydot.Dot对象调用函数write_pdf("iris.pdf"),它也解决了问题. (3认同)
  • @programmer这个列表的长度实际上是1.所以,只需`graph [0] .write_pdf`.顺便说一下,我猜它返回列表的原因是单个点文件中可能有多个树. (2认同)

Ili*_*bev 25

pydot.graph_from_dot_data() 返回一个列表,所以尝试:

graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph[0].write_pdf("iris.pdf") 
Run Code Online (Sandbox Code Playgroud)


Dee*_*Rao 5

我有完全相同的问题.原来我没有安装graphviz.一旦我这样做,它开始工作.