首页 > 编程语言 >python决策树(二叉树、树)的可视化

python决策树(二叉树、树)的可视化

时间:2022-10-27 13:01:56浏览次数:58  
标签:no python tree label 二叉树 first root lenses 决策树


问题描述

在我学习​​机器学习实战-决策树​​部分,欲可视化决策树结构。最终可视化结果:

python决策树(二叉树、树)的可视化_决策树

python决策树(二叉树、树)的可视化_解决方案_02

解决方案

决策树由嵌套字典组成,如:

{“no surfacing”: {0: “no”, 1: {“flippers”: {0: “no”, 1: “yes”}}}}

{‘tearRate’: {‘reduced’: ‘no lenses’, ‘normal’: {‘astigmatic’: {‘no’: {‘age’: {‘young’: ‘soft’, ‘presbyopic’: {‘prescript’: {‘myope’: ‘no lenses’, ‘hyper’: ‘soft’}}, ‘pre’: ‘soft’}}, ‘yes’: {‘prescript’: {‘myope’: ‘hard’, ‘hyper’: {‘age’: {‘young’: ‘hard’, ‘presbyopic’: ‘no lenses’, ‘pre’: ‘no lenses’}}}}}}}}

使用graphviz包中的画点和连线。代码如下:

"""
@author: lishihang
@software: PyCharm
@file: TreeVis.py
@time: 2018/11/29 22:20
"""
from graphviz import Digraph


def plot_model(tree, name):
g = Digraph("G", filename=name, format='png', strict=False)
first_label = list(tree.keys())[0]
g.node("0", first_label)
_sub_plot(g, tree, "0")
g.view()


root = "0"


def _sub_plot(g, tree, inc):
global root

first_label = list(tree.keys())[0]
ts = tree[first_label]
for i in ts.keys():
if isinstance(tree[first_label][i], dict):
root = str(int(root) + 1)
g.node(root, list(tree[first_label][i].keys())[0])
g.edge(inc, root, str(i))
_sub_plot(g, tree[first_label][i], root)
else:
root = str(int(root) + 1)
g.node(root, tree[first_label][i])
g.edge(inc, root, str(i))


d1 = {"no surfacing": {0: "no", 1: {"flippers": {0: "no", 1: "yes"}}}}

d2 = {'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'yes': {
'prescript': {'myope': 'hard', 'hyper': {'age': {'young': 'hard', 'presbyopic': 'no lenses', 'pre': 'no lenses'}}}},
'no': {'age': {'young': 'soft', 'presbyopic': {
'prescript': {'myope': 'no lenses',
'hyper': 'soft'}},
'pre': 'soft'}}}}}}

plot_model(d1, "hello.gv")
plot_model(d2, "hello2.gv")


标签:no,python,tree,label,二叉树,first,root,lenses,决策树
From: https://blog.51cto.com/u_15847885/5800834

相关文章

  • opencv-contrib-python的安装:Set OPENCV_ENABLE_NONFREE CMake option and rebuild th
    问题描述前往本页,可查看opencv-python和opencv-contrib-python的区别。​​https://docs.opencv.org/master/​​比如,SIFT就需要用到opencv-contrib-python包中的cv2.xfeat......
  • 机器学习实战:决策树-是否有鱼
    输出结果model:{‘nosurfacing’:{0:‘no’,1:{‘flippers’:{0:‘no’,1:‘yes’}}}}predict:[1,1]yes代码"""@author:lishihang@software:PyCharm@file:i......
  • python实验报告(面向对象程序设计)
    实验报告实例01:通过类属性统计类的实例个数  结果:实例02:根据身高、体重计算BMI指数(共享版)  结果:   实例03:在模拟电影点播功能时应用属性  结果:......
  • PYTHON 中sort 与 sorted
    sort:改变原来的列表sorted:生成新列表,原列表不变参数:reverse 正序还是倒序list_name要排列的对象key排列方式函数1.通过len()函数排序l......
  • 用 C++ 实现 Python 中的 range
    在C++中实现Python的range目录在C++中实现Python的range在实现过程中几个应该注意的问题整型溢出迭代器选择终止条件类型选择vector转换最终代码和Python对比代码在最后,......
  • Python修改步数并同步到微信
    1.前言目前有很多可以刷步数的网站,都有在更新维护且免费,有需求或者仅在乎功能的可以看看,如下:1.https://www.17bushu.com/2.https://yd.shuabu.net/3.https://www......
  • python for-break-else 语句
    有两种情况可能会导致for循环结束。第一个是for循环中满足条件遇到break,第二种情况是循环自然结束。现在我们可能想知道其中的哪一个是循环完成的原因,一种方法是设置一个......
  • 安装 Python 模块
    作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。这允许Python用户......
  • 力扣455(java&python)-分发饼干(简单)
    题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;......
  • Python操作数据库与MD5加密
    #md5加密importhashlibm=hashlib.md5()m.update("123456".encode('utf-8'))ret=m.hexdigest()print(ret)#数据库操作pymysql安装pymysqlimportpymy......