zoukankan      html  css  js  c++  java
  • 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' "]

    是否在使用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)显示窗口如下,恭喜安装成功

      

      安装完成后我们可以使用图形化界面来打开dot文件或者使用dot语言编写图形:

      可以通过运行gvedit.exe文件打开图形化操作界面:

      

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

      切记重启一下开启jupyter notebook编辑页面的cmd窗口。

  • 相关阅读:
    超线程、多核、多处理器
    视图
    面试题27:连续子数组的最大和
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现第七届蓝桥杯国赛 赢球票
    Java实现第七届蓝桥杯国赛 赢球票
    Java实现第七届蓝桥杯国赛 赢球票
  • 原文地址:https://www.cnblogs.com/yuncaige/p/14087881.html
Copyright © 2011-2022 走看看