异常1:ExecutableNotFound: failed to execute [‘dot’, ‘-Tsvg’], make sure the Graphviz executables are on your systems
异常2:CalledProcessError: Command '['dot', '-Tsvg']' returned non-zero exit status 1. [stderr: b"Error: <stdin>: syntax error in line 1 near 'None'\r\n"]
是否在使用graphviz遇上这两个问题?恭喜你,遇上才哥不迷路。
首先异常1的原因是只安装了Python的graphviz第三方接口模块并没有安装graphviz画图软件
异常2的原因主要为安装的graphviz软件不兼容当前的Python解释器或当前的graphviz第三个接口模块,最好的解决方法是换一个低版本的graphviz软件
网上介绍异常二的另外一个原因是没有在tree.export_graphviz中添加out_file=None参数,(我个人测试是没有问题的,没有办法的时候可以试一下)
今天想画一下决策树,结果发现graphviz不仅仅是安装一下模块这么简单,首先,graphviz是一个使用dot语言的画图编辑器,当然也可以执行dot文件。于是要想画决策树可以有多种方法。
1、使用Python生成dot文件后,通过graphviz的gvedit.exe可以图形化界面操作打开dot文件,然后就可以生成决策树图形
2、可以通过python的第三方模块,graphviz接口调用本地安装的graphviz软件,直接生成决策树图形
下面我们就来介绍一下如何在Python中使用graphviz画一颗决策树:(在网上看了许多博客都没有找到一个完整的介绍,失望!!!)
环境:
系统:win7
Python解释器版本:Python3.5,(Python解释器向下兼容,3.5以上均可)
编辑环境:jupyter notebook,(在pycharm中运行后生成的是pdf文件,中文编码问题需要自己解决)
graphviz版本:graphviz-2.38.msi,(实测现在官网发布的2.44.1安装后在Python3.5中运行时总会遇到CalledProcessError
异常,所有建议通过graphviz-2.38.msi安装)
以下提供graphviz-2.38安装包和中文教程
链接:https://pan.baidu.com/s/1y8-Owj9UiwrWcyJ7VwY_4A
提取码:q6z0
1、首先我们需要安装graphviz-2.38软件:
a.下载安装包后,傻瓜式安装,记住安装路径即可
b.安装完成后,添加环境变量:(注意路径为自己安装路径下的bin目录)
c.测试:(在cmd命名窗口输入dot -version)显示窗口如下,恭喜安装成功
2、然后我们需要安装graphviz第三方模块:
命令:pip install graphviz -i https://pypi.tuna.tsinghua.edu.cn/simple(这里网上各种介绍说安装python-graphviz或者是pygraphviz模块,但个人实测只能安装graphviz,其他两个模块安装报错)
安装完成后即可在Python中调用画决策树
from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split wine = load_wine() #区分数据集和测试集 Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size=0.3) clf = tree.DecisionTreeClassifier(criterion="entropy") clf = clf.fit(Xtrain,Ytrain) score = clf.score(Xtest,Ytest) feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','稀释葡萄酒','脯氨酸'] import graphviz #输出生成的决策树 dot_data = tree.export_graphviz(clf ,feature_names = feature_name ,class_names = ["琴酒","雪莉","贝尔摩德"] ,filled=True ,rounded=True ,out_file=None #(异常二的解决方法二) ,special_characters="utf-8" ) graph = graphviz.Source(dot_data) graph.view()