前提提要 在学习机器学习skicit-learn实战决策树时在Mac Catalina OS 10.15以上操作系统、python 3.8、jupyter是2.6、skicit-learn是去年安装的等等,pages一切正常但在graphviz画图仍然会报如下错误
'...ExecutableNotFound: failed to execute ['dot', '-Tsvg'], make sure the Graphviz executables are on your systems' PATH'
大家学习机器学习实战估计也都是这一个代码,但幕内大佬已经画出来了,我却卡在这里了,而且没法说,只能自己瞎找,open了一下terminal才发现并没有graphviz文件,甚至anaconda都没安装,,,更用不了jupyter运行环境了,话不多说从头开始弄吧。
1、下载anaconda并安装jupyter运行环境
这一步十分简单的,给你们一个网站自行下载即可
anaconda由此下载
这里有一个需要注意的是:首先要保证你的python版本最低也不能低于3.6应该都是3.8的,否则没法运行jupyter notebook。
你可以下载那个shell文件然后打开就会自动打开terminal进行安装。完成后会在application(应用程序)页面上看到这个标识。
2、敲入代码(需要的我放在后面了)
3、发现错误error
这时如果不出意外的话会有如下错误
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
~/opt/anaconda3/lib/python3.8/site-packages/graphviz/backend.py in run(cmd, input, capture_output, check, encoding, quiet, **kwargs)
163 try:
--> 164 proc = subprocess.Popen(cmd, startupinfo=get_startupinfo(), **kwargs)
165 except OSError as e:
~/opt/anaconda3/lib/python3.8/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
853
--> 854 self._execute_child(args, executable, preexec_fn, close_fds,
855 pass_fds, cwd, env,
~/opt/anaconda3/lib/python3.8/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
1701 err_msg = os.strerror(errno_num)
-> 1702 raise child_exception_type(errno_num, err_msg, err_filename)
1703 raise child_exception_type(err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'dot'
During handling of the above exception, another exception occurred:
ExecutableNotFound Traceback (most recent call last)
~/opt/anaconda3/lib/python3.8/site-packages/IPython/core/formatters.py in __call__(self, obj)
343 method = get_real_method(obj, self.print_method)
344 if method is not None:
--> 345 return method()
346 return None
347 else:
~/opt/anaconda3/lib/python3.8/site-packages/graphviz/files.py in _repr_svg_(self)
111
112 def _repr_svg_(self):
--> 113 return self.pipe(format='svg').decode(self._encoding)
114
115 def pipe(self, format=None, renderer=None, formatter=None, quiet=False):
~/opt/anaconda3/lib/python3.8/site-packages/graphviz/files.py in pipe(self, format, renderer, formatter, quiet)
134 data = text_type(self.source).encode(self._encoding)
135
--> 136 out = backend.pipe(self._engine, format, data,
137 renderer=renderer, formatter=formatter,
138 quiet=quiet)
~/opt/anaconda3/lib/python3.8/site-packages/graphviz/backend.py in pipe(engine, format, data, renderer, formatter, quiet)
242 """
243 cmd, _ = command(engine, format, None, renderer, formatter)
--> 244 out, _ = run(cmd, input=data, capture_output=True, check=True, quiet=quiet)
245 return out
246
~/opt/anaconda3/lib/python3.8/site-packages/graphviz/backend.py in run(cmd, input, capture_output, check, encoding, quiet, **kwargs)
165 except OSError as e:
166 if e.errno == errno.ENOENT:
--> 167 raise ExecutableNotFound(cmd)
168 else:
169 raise
ExecutableNotFound: failed to execute ['dot', '-Tsvg'], make sure the Graphviz executables are on your systems' PATH
4、如何解决?(令人抓狂时刻)
很多人好不容易走到这一步了,但还是没办法逃避掉第三步的错误,win系统是可以在系统内直接手动修改环境变量的,Mac OS不行!
哎,这就很烦,因此我也为此抓狂了很久,然后我看到了一个大佬的文章有写有关Mac OS的环境配置
于是我也按照他写的进行一步步操作,大佬链接,然后便开始下载brew命令文件
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
呃,你们下载就知道多大了,不出意外没个小半天下不完除非你网速贼快。
好了,终于下完了,可以安装conda了于是进行安装conda文件(说明一下为啥我先安装的conda,因为conda文件少,安装快,后期安装完就可以直接下次打开用)
~ cd /usr/local/Mac/anaconda3.0
~ pip install conda
~ ...忽略
然后用brew安装graphviz包(Mac用brew是真的绝了,省去了很多麻烦的步骤,很良心!)
~ brew install graphviz
安装后系统会自动把graphviz文件添加到Celler内,不用管了
然后就可以进行对graphviz进行配置了
打开terminal
输入
sudo vim .bash_profile
然后输入密码,然后输入
i
然后随便找一个空行把下面的代码复制进去
export PATH="/usr/local/bin:$PATH"
然后输入
:wq
保存并退出
然后输入
source .bash_profile
然后关掉就可以了配置完成,打开anaconda
,点击Environment,打开terminal输入
conda install python-graphviz
即可配置到anaconda中,然后打开jupyter nodebook
再重新跑一遍,就可以了~
end~
附录一(附决策树代码):
### coding in utf-8
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine = load_wine()
import pandas as pd
pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1)
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)
#训练集构造 test_size=0.3是训练与目标三七分#
clf = tree.DecisionTreeClassifier(criterion="gini")
#构造决策树数学模型 参数是信息熵#
clf = clf.fit(Xtrain, Ytrain)
#训练模型 fit是训练接口#
score = clf.score(Xtest, Ytest)
#为模型打分#
#画决策树#
import graphviz
from graphviz import Digraph
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','稀释葡萄酒','脯氨酸']
data_dot = tree.export_graphviz(clf, feature_names=feature_name,
class_names=["啤酒","葡萄酒","果酒"],
filled=True, rotate=True)
graph = graphviz.Source(data_dot)
graph