Part3—Python实现之可视化

1.前言

假期第一天,首先祝各位假期愉快,难得有这样一段完整的时间,放松的同时也别忘了给自己充电呀,Python实现ID3/C4.5决策树下篇来了。

「决策树」| Part2—Python实现之构建决策树

中我们已经可以基于给定数据集训练出决策树模型,只不过是以字典方式表示决策树,决策树直观、易于理解的优点完全体现不出来。因此,这篇文章的目的就是将训练出的决策树模型以树状图形表示。

给定数据集:

字典形式决策树模型:

2.获取决策树的叶节点数及深度

为了使绘制出的决策树图形不因树的节点、深度的增减而变得畸形,因此利用决策树的叶子节点个数以及树的深度将x轴、y轴平均切分,从而使树状图平均分布在画布上。

3.绘制决策树

3.1绘制节点

plotNode函数一次绘制的是一个箭头与一个节点,plotMidText函数绘制的是直线中点上的文本。

3.2递归绘制决策树

递归绘制决策树的整体思路如下:

(1)绘制当前节点;

(2)如果当前节点的子节点不是叶子节点,则递归;

(3)如果当前节点的子节点是叶子节点,则绘制。

根据决策树的叶子节点数和深度来平均切分画布,并且x、y轴的总长度为1,如下图所示:

原谅我的画图水平

3.2.1在createPlot函数中:

plotTree.totalW:表示叶子节点个数,因此上图中每两个叶子节点之间的距离为:1/plotTree.totalW;

plotTree.totalD:表示决策树深度;

plotTree.xOff:表示最近绘制的叶子节点x坐标,在绘制叶节点时其值才会更新;其初始值为图中虚线圆圈位置,这样在以后确定叶子节点位置时可以直接加整数倍的1/plotTree.totalW;

plotTree.yOff= 1.0 :表示当前绘制的深度,其值初始化为根节点y坐标。

3.2.2在plotTree函数中:

在确定当前节点x坐标时,只需确定当前节点下的叶节点个数,其x坐标即为叶节点所占距离的一半:float(numLeafs)/2.0/plotTree.totalW;

由于plotTree.xOff初始值为-0.5/plotTree.totalW,因此当前节点x坐标还需加上0.5/plotTree.totalW。

4.决策树可视化

字典形式表示决策树:

树状图形决策树:

5.使用决策树算法

在已知对方有钱,人品差,长得漂亮后,利用前面训练的决策树做出决策,见或不见?!

决策结果:

6.存储决策树模型

构建决策树消耗的时间还是很可观的,尤其在数据量大的时候,因此,当训练完决策树模型后有必要将其保存下来,以便后续使用。使用Python模块的pickle序列化对象可以解决这个问题,序列化对象可以在磁盘上保存对象,在需要时将其读取出来。

不知不觉,进入了假期第二天......

Enjoy Coding and Life!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181002G024AK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券