NameError:全局名称' dot_parser'未定义/ PydotPlus / Pyparsing 2 / Anaconda

时间:2016-04-17 14:46:40

标签: python machine-learning

我正在尝试关注Googles机器学习视频中的一个我特此陷入困境(https://youtu.be/tNa99PG8hR8?t=265

我在Spyder / Python 2.7中工作:

from sklearn.datasets import load_iris
import numpy as np
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)

#Copied 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,  
                         special_characters=True)  
graph = pydot.graph_from_dot_data(dot_data.getvalue())  
graph.write_pdf("iris.pdf")

输出

NameError: global name 'dot_parser' is not defined

我按照指示使用PydotPlus和Pyparsing 2: NameError: global name 'dot_parser' is not defined

conda list我得到

pyparsing 2.0.3 py27_0 defaults
pydotplus 2.0.2 <pip> defaults

2 个答案:

答案 0 :(得分:1)

我发现将代码更改为

import pydotplus

graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  

工作得很好。

答案 1 :(得分:1)

在进行Google机器学习教程时,我遇到了与您相同的问题。为了解决这个问题,我做了以下工作:( PS:我正在使用Linux Mint 17.3 Cinammon。)

先决条件:
在本教程的第1集中,讲师(JoshGordon)建议你从Anaconda安装scikit-learn。 教程链接:https://www.youtube.com/watch?v=cKxRvEZd3Mw
Anaconda下载链接:https://www.continuum.io/downloads
这完全是我做的,我为我的系统安装了Anaconda。 (Linux Mint)

安装了anaconda后,我打开了终端并输入了以下命令:

conda install graphviz
conda install pydot

然后我再次运行脚本并且它有效。

PS:我认为它有效,因为当你尝试运行脚本时,python会在Anaconda中寻找pydot和graphviz库,但问题是,它们似乎没有捆绑在一起有了它,你必须先安装它们。