我从Visualizing a Decision Tree - Machine Learning获得了以下代码 导入numpy为np 来自sklearn.datasets import load_iris 来自sklearn导入树
iris = load_iris()
test_idx = [0, 50 , 100]
train_target = np.delete(iris.target, test_idx)
train_data = np.delete(iris.data, test_idx , axis=0)
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")
我试图在我的python 3.5中运行它但是我得到一个错误,说图是一个列表。
Traceback (most recent call last):
File "Iris.py", line 31, in <module>
graph.write_pdf("iris.pdf")
AttributeError: 'list' object has no attribute 'write_pdf'
Press any key to continue . . .
为什么这里有graph
列表?
答案 0 :(得分:0)
Pydot无法在Python3中运行。 您可以将Pydotplus(graph.write_pdf("iris.pdf") AttributeError: 'list' object has no attribute 'write_pdf'&#34;)用于python3而不是pydot。
虽然,youtube上显示的代码适用于Python2。所以,如果你使用Python2会更好。
答案 1 :(得分:0)
我认为这是重复的,这里回答了相同的问题link
因为pydot.graph_from_dot_data
返回一个列表,解决方案是:
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph[0].write_pdf("iris.pdf")
这Python 3.6.5 :: Anaconda, Inc.
为我解决了问题