Câu hỏi graph.write_pdf (“iris.pdf”) AttributeError: đối tượng 'list' không có thuộc tính 'write_pdf'


Mã của tôi là làm theo các lớp học của máy học google.The hai mã là same.I không biết tại sao nó hiển thị lỗi. Có thể là loại biến là error.But mã của google là giống với tôi.Who đã từng có điều này vấn đề?

Đây là lỗi

[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]

Đây là mã

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")

39
2017-07-04 03:13


gốc




Các câu trả lời:


pydot.graph_from_dot_data() trả về một danh sách, vì vậy hãy thử:

graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph[0].write_pdf("iris.pdf") 

18
2017-08-26 15:15



Cảm ơn câu trả lời. Giải pháp đơn giản đủ mà không cần phải trải qua những rắc rối của pydotplus - maheeka
Nó ổn với tôi. Cảm ơn bạn! - foo bar


Tôi nghĩ rằng bạn đang sử dụng phiên bản mới hơn của python. Hãy thử với pydotplus.

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

Điều này nên làm điều đó.


59
2017-07-04 04:59



Cảm ơn bạn rất rất nhiều !!!! Phương pháp này đã giải quyết được vấn đề của tôi. - 乔守卿
Tôi chỉ có một cái nhìn. Đồ thị là một danh sách và nó chứa một đối tượng pydot.Dot.I sử dụng đối tượng pydot.Dot gọi hàm write_pdf ("iris.pdf") , nó cũng giải quyết được câu hỏi. - 乔守卿
@ 乔守卿 Bạn đã sử dụng cú pháp nào / bạn đã sử dụng pydot.Dot như thế nào? - programmer
@programmer Độ dài của danh sách này thực sự là 1. Vì vậy, chỉ graph[0].write_pdf. BTW, tôi đoán lý do nó trả về một danh sách là có thể có nhiều cây trong một tệp dấu chấm đơn. - Weizhou He


Tôi đã có chính xác cùng một vấn đề. Hóa ra là tôi chưa cài đặt graphviz. Một khi tôi đã làm điều đó nó bắt đầu làm việc.


4
2017-07-02 04:05





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

Tôi có Python 3.6.0 | Anaconda 4.3.1 và nhận được lỗi:

Tệp "C: \ Anaconda \ lib \ site-packages \ pydotplus \ graphviz.py", dòng   Năm 1960, trong sáng tạo       Không tìm thấy tệp thực thi 'GraphViz \')

InvocationException: Không thể tìm thấy tệp thi hành của GraphViz


2
2018-04-10 16:13



Bạn nên cài đặt GraphViz đầu tiên từ đây (graphviz.org/Download..php) và sau đó thêm thư mục "bin" của nó với các tệp thi hành (c: \ Program Files (x86) \ Graphviz2.38 \ bin) vào PATH của máy tính của bạn. - foo bar


@Alex Sokolov, cho trường hợp của tôi trong cửa sổ, tôi đã tải xuống và cài đặt / giải nén sau đây vào một thư mục rồi thiết lập PATH trong biến môi trường Windows. chạy lại mã py làm việc cho tôi. hy vọng là hữu ích cho bạn.


1
2018-05-15 08:41





Tôi cài đặt scikit-learning thông qua conda và tất cả về không hoạt động. Thứ nhất, tôi phải cài đặt libtool

brew install libtool --universal

Sau đó tôi theo hướng dẫn sklearn này Sau đó thay đổi tệp python thành mã này

clf = clf.fit(train_data, train_target)
tree.export_graphviz(clf,out_file='tree.dot') 

Cuối cùng chuyển đổi sang png trong terminal

dot -Tpng tree.dot -o tree.png

0
2017-10-19 03:13





Tôi đã thử các câu trả lời trước và vẫn gặp lỗi khi chạy tập lệnh Vì vậy, Tôi vừa mới sử dụng pydotplus

import pydotplus

và cài đặt "graphviz" bằng cách sử dụng:

sudo apt-get install graphviz

Sau đó, nó làm việc cho tôi và tôi đã thêm

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

Nhờ những người đóng góp trước đó.


0
2018-03-20 08:53





Tôi hy vọng điều này sẽ giúp, tôi đã có một vấn đề tương tự. Tôi quyết định không sử dụng pydot / pydotplus, mà là graphviz. Tôi sửa đổi (hầu như) mã và nó hoạt động kỳ diệu! :)

# 2. Train classifier
# Testing Data
# Examples used to "test" the classifier's accuracy
# Not part of the training data
import numpy as np
from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()
test_idx = [0, 50, 100] # Grabs one example of each flower for testing data (in the data set it so happens to be that
                        # each flower begins at 0, 50, and 100

# training data
train_target = np.delete(iris.target, test_idx)     # Delete all but 3 for training target data
train_data = np.delete(iris.data, test_idx, axis=0) # Delete all but 3 for training data

# testing data
test_target = iris.target[test_idx] # Get testing target data
test_data = iris.data[test_idx]     # Get testing data

# create decision tree classifier and train in it on the testing data
clf = tree.DecisionTreeClassifier()
clf.fit(train_data, train_target)

# Predict label for new flower
print(test_target)
print(clf.predict(test_data))

# Visualize the tree
from sklearn.externals.six import StringIO
import graphviz
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 = graphviz.Source(dot_data.getvalue())
graph.render("iris.pdf", view=True)

0
2018-05-19 05:05