胖头猫游戏提供热门游戏下载和手游攻略!

探索Graphviz:不止是绘制决策树的强大工具

发布时间:2024-10-21浏览:43

各位老铁们好,相信很多人对探索Graphviz:不止是绘制决策树的强大工具都不是特别的了解,因此呢,今天就来为大家分享下关于探索Graphviz:不止是绘制决策树的强大工具以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

关键词: 数据可视化,graphviz

前言

数据可视化一直各行各业的一个重点。在机器学习中,常规的数据可视化使用matplotlib包就基本可以解决了,如果还不够的话可以使用seaborn进行补充。但是对于决策树算法以及一些集成算法来说matplotlib就显得力不从心了。人们就开始选择其他工具显示相关数据了,到目前为止我所知的就是Graphviz[1]了。

1 Graphviz简介

Graphviz是开源的图形可视化软件。它有几个主要的图形布局程序。它还具有Web和交互式图形界面,以及辅助工具,库和语言绑定。Graphviz布局程序以简单的文本语言描述图形,并以几种有用的格式制作图形,例如用于网页的图像和SVG,用于PDF或其他文档。或在交互式图形浏览器中显示。 (Graphviz还支持XML方言GXL。)Graphviz具有用于具体图表的许多有用功能,例如颜色,字体,表格节点布局,线型,超链接和自定义形状的选项。

2 安装与环境配置

1.软件下载与环境配置: https://www.graphviz.org/download/[2],该软件支持Linux、Mac、Windows系统,可根据自己的电脑选择安装。环境就是就bin目录配置环境变量(path里)即可。

2.Python包安装 : 安装graphviz模块

pip install graphvize

3 决策树绘制

绘制一个决策树的案例如下:

from imageio import imreadimport matplotlib.pyplot as pltimport graphviz# 创建树对象mygraph = graphviz.Digraph(node_attr={'shape': 'box'}, edge_attr={'labeldistance': "10.5"}, format="png")# 构建节点mygraph.node("0", "Has feathers?")mygraph.node("1", "Can fly?")mygraph.node("2", "Has fins?")mygraph.node("3", "Hawk")mygraph.node("4", "Penguin")mygraph.node("5", "Dolphin")mygraph.node("6", "Bear")# 构建边mygraph.edge("0", "1", label="True")mygraph.edge("0", "2", label="False")mygraph.edge("1", "3", label="True")mygraph.edge("1", "4", label="False")mygraph.edge("2", "5", label="True")mygraph.edge("2", "6", label="False")# 渲染mygraph.render("decisionTree")# 图形显示ax = plt.gca() # 获取图形坐标轴ax.imshow(imread("decisionTree.png")) # 读取生成的图片ax.set_axis_off() # 图形不嫌弃是坐标plt.show() # 显示图形

最后会生成一个decisionTree.png决策树图片如下:

从上图可以看出图片不是很清晰,我们可以生成其他高清矢量图格式,如svg、pdf等。在创建树对象时,设置format=“pdf”,即可,主要代码如下:

mygraph = graphviz.Digraph(node_attr={'shape': 'box'}, edge_attr={'labeldistance': "10.5"}, format="pdf")

注: 这时就不要使用matplotlib打开图片了。pdf高清文件图如下:

4 其他图形拓展

上面绘制了决策树,其实我们也可以拓展绘制结构句法树,这也是比较简单的,

from imageio import imreadimport matplotlib.pyplot as pltimport graphvizax = plt.gca()mygraph = graphviz.Graph(node_attr={'shape': 'none'}, edge_attr={'labeldistance': "10.5"}, format="pdf")mygraph.node("0", "S") # 节点mygraph.node("1", "N")mygraph.edge("0", "1") # 边mygraph.node("2", "小李", fontname="Microsoft YaHei")mygraph.edge("1", "2")mygraph.node("3", "VP")mygraph.node("4", "DP")mygraph.edge("0", "3")mygraph.edge("3", "4")mygraph.node("5", "D")mygraph.node("6", "U")mygraph.edge("4", "5")mygraph.edge("4", "6")mygraph.node("7", "远远", fontname="Microsoft YaHei")mygraph.node("8", "地", fontname="Microsoft YaHei")mygraph.edge("5", "7")mygraph.edge("6", "8")mygraph.node("9", "VP")mygraph.edge("3", "9")mygraph.node("10", "V")mygraph.node("11", "CS")mygraph.edge("9", "10")mygraph.edge("9", "11")mygraph.node("12", "看见", fontname="Microsoft YaHei")mygraph.edge("10", "12")mygraph.node("13", "N")mygraph.node("14", "VP")mygraph.edge("11", "13")mygraph.edge("11", "14")mygraph.node("15", "小王", fontname="Microsoft YaHei")mygraph.edge("13", "15")mygraph.node("16", "PP")mygraph.node("17", "V")mygraph.edge("14", "16")mygraph.edge("14", "17")mygraph.node("18", "看书", fontname="Microsoft YaHei")mygraph.edge("17", "18")mygraph.node("19", "P")mygraph.node("20", "NP")mygraph.edge("16", "19")mygraph.edge("16", "20")mygraph.node("21", "在", fontname="Microsoft YaHei")mygraph.edge("19", "21")mygraph.node("22", "N")mygraph.node("23", "F")mygraph.edge("20", "22")mygraph.edge("20", "23")mygraph.node("24", "草地", fontname="Microsoft YaHei")mygraph.node("25", "上", fontname="Microsoft YaHei")mygraph.edge("22", "24")mygraph.edge("23", "25")mygraph.render("tmp")

绘制结果如下:

总体来说还是可以接受的。当然这个是一个点一个点连的,在实际中则需要利用树这种数据结构的相关算法进行处理,快速绘制出相关图形。当然还可以绘制其他图形,例如:

这里就不作演示,可以参考官方文档[3]!

总结

Graphviz是开源的图形可视化软件,不仅仅可以绘制决策树,还可以更多的无向图和有向图,Graphviz提供了很多图形供我们组合以及不同的线条,颜色等,可以充分发挥我们的想象去思考如何构建我们图形,例如自动机转换图等。除此之外,Graphviz提供的接口比较多,能够导出的结果也是多种多样,能够满足我们常用的需求。

Reference

[1] Graphviz:http://www.graphviz.org/about/

[2] https://www.graphviz.org/download/:https://www.graphviz.org/download/

[3] 官方文档:http://www.graphviz.org/documentation/

用户评论

白恍

完全没想到Graphviz只是一个绘图工具,原来它还可以用来描述算法流程和系统架构呢。

    有11位网友表示赞同!

淡抹烟熏妆丶

nested的决策结构画起来超级方便,我再也不用自己手写复杂图了!

    有13位网友表示赞同!

岁岁年年

Graphviz真的是学习决策树的最佳伴手礼,可视化效果超赞!

    有15位网友表示赞同!

一样剩余

第一次尝试使用Graphviz,绘制的结果让我觉得像是在玩拼装模型一样有趣。

    有6位网友表示赞同!

陌離

本来只是需要一个简单的UML工具,没想到用上了Graphviz发现它的应用多到可怕。

    有8位网友表示赞同!

一生荒唐

太惊喜了!决策树构建起来变得像讲故事一样流畅。

    有19位网友表示赞同!

你很爱吃凉皮

没想到一个用于绘图的工具竟然能够帮助我理解复杂的数据流程。

    有7位网友表示赞同!

封锁感觉

原来Graphviz不仅可以绘制决策树,还支持各种复杂的图表和图,简直是信息可视化的大神水平啊!

    有14位网友表示赞同!

最迷人的危险

对于程序员来说,Graphviz的功能远不止画个决策树那么简单,简直就是代码结构分析的好帮手。

    有20位网友表示赞同!

冷青裳

我一直以为它只能画点简单的流程图,没想到还能对大数据流进行深度追踪。

    有14位网友表示赞同!

無極卍盜

在处理业务架构时,Graphviz的表现超出了我的期待,清晰、直观地呈现了我们的体系。

    有15位网友表示赞同!

琴断朱弦

我以为仅仅是个小工具,没想到它的灵活性和扩展性都让我大吃一惊,无论是决策树还是流程图都轻松应对。

    有11位网友表示赞同!

﹎℡默默的爱

用Graphviz画决策树时的体验像是一种艺术创作过程,每一步都能感受到创造的成就感。

    有12位网友表示赞同!

在哪跌倒こ就在哪躺下

我原以为仅是一个简单绘图工具,但现在发现它的功能深度足以应用于各种项目分析中。

    有13位网友表示赞同!

残花为谁悲丶

尝试了一次后,我立即意识到Graphviz不仅仅绘制出美妙的图表,更是对逻辑和数据结构的一种深刻理解过程。

    有16位网友表示赞同!

柠栀

本来想找一个专门的UML绘图神器,但使用过Graphviz后,发现它的适用范围远超了我的想象。

    有17位网友表示赞同!

ゞ香草可樂ゞ草莓布丁

Graphviz的决策树绘制功能太强大了,它不仅帮助我理清思路,还能向团队清晰传达策略规划。

    有14位网友表示赞同!

抓不住i

我用Graphviz绘制了一个小型项目流程图,结果发现对于复杂系统,其描述能力令人惊叹。

    有9位网友表示赞同!

命该如此

没想到只是想做个简单的概念模型,使用Graphviz却意外地发现了它的多元应用生态,真是惊喜连连!

    有13位网友表示赞同!

热点资讯