Python3.5在jupyter中国使用graphviz画决策树(包括graphviz-2.38.msi的安装)

异常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目录)

    Python3.5在jupyter中国使用graphviz画决策树(包括graphviz-2.38.msi的安装)

   c.测试:(在cmd命名窗口输入dot -version)显示窗口如下,恭喜安装成功

  Python3.5在jupyter中国使用graphviz画决策树(包括graphviz-2.38.msi的安装)

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

Python3.5在jupyter中国使用graphviz画决策树(包括graphviz-2.38.msi的安装)

 

上一篇:Graphviz 画图教程(Python)


下一篇:python-不带graphviz的NetworkX的固定位置层次输出?