2016-07-04 14 views
33

मेरा कोड Google की मशीन सीखने की कक्षा का पालन करता है। दो कोड समान हैं। मुझे नहीं पता कि यह क्यों त्रुटि दिखाएं। वैरिएबल का प्रकार त्रुटि हो सकता है। लेकिन Google का कोड मेरे लिए समान है। इस समस्या को किसने कभी किया है?graph.write_pdf ("iris.pdf") विशेषता त्रुटि: 'सूची' ऑब्जेक्ट में कोई विशेषता नहीं है 'write_pdf'

यह त्रुटि

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

है यह कोड

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

उत्तर

53

मैं तुम्हें अजगर के नए संस्करण का उपयोग कर रहे लगता है। कृपया pydotplus के साथ प्रयास करें।

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

ऐसा करना चाहिए।

+0

बहुत बहुत धन्यवाद !!!! इस विधि ने मेरी समस्या हल की। –

+3

मैंने अभी देखा था। ग्राफ एक सूची है और इसमें एक pydot है। ऑब्जेक्ट। मैं pydot का उपयोग करता हूं। डॉट ऑब्जेक्ट फ़ंक्शन write_pdf ("iris.pdf") को कॉल करता है, यह प्रश्न भी हल करता है। –

+0

@ 乔守卿 आपने किस वाक्यविन्यास का उपयोग किया/आपने pydot.Dot का उपयोग कैसे किया? – programmer

16

pydot.graph_from_dot_data() सूची लौटाता है, इसलिए कोशिश:

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

उत्तर के लिए धन्यवाद। पाइडोटप्लस – maheeka

+0

की परेशानी से गुज़रने के बिना सरल पर्याप्त समाधान जो मेरे लिए काम करता है। धन्यवाद! –

0

मैं conda और के बारे में काम नहीं के सभी के माध्यम से scikit सीखने स्थापित करें। सबसे पहले, मैं libtool स्थापित करने के लिए

brew install libtool --universal 

तब मैं this sklearn guide फिर टर्मिनल

dot -Tpng tree.dot -o tree.png 
0
import pydotplus 
... 
graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
graph.write_pdf("iris.pdf") 
में PNG में इस कोड को

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

अंत में कन्वर्ट करने के लिए अजगर फ़ाइल को बदलने का पालन

मेरे पास पाइथन 3.6.0 है | एनाकोंडा 4.3.1 और त्रुटि प्राप्त करें:

File "C:\Anaconda\lib\site-packages\pydotplus\graphviz.py", line 1960, in create 'GraphViz\'s executables not found')

InvocationException: GraphViz's executables not found

+1

आपको पहले से ग्राफविज़ को इंस्टॉल करना चाहिए (http://www.graphviz.org/Download..php) और उसके बाद निष्पादन योग्य (c: \ प्रोग्राम फ़ाइलें (x86) \ Graphviz2.38 \ bin) के साथ अपनी "bin" निर्देशिका जोड़ें अपने कंप्यूटर के पथ के लिए। –

1

@Alex सोकोलोव, विंडो में मेरे मामले के लिए, मैं सेटअप PATH in Windows environment variables डाउनलोड किया और फिर एक फोल्डर में स्थापित/अनज़िप the following। मेरे लिए पीई कोड काम फिर से चलाएं। आशा आपके लिए उपयोगी है।

3

मेरे पास बिल्कुल वही समस्या थी। बाहर निकला कि मैंने ग्राफविज़ स्थापित नहीं किया था। एक बार मैंने ऐसा किया कि यह काम करना शुरू कर दिया।

संबंधित मुद्दे

 संबंधित मुद्दे