- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 代码地址:https://github.com/WordZzzz/ML/tree/master/Ch03
- 操作系统:WINDOWS 10
- 软件版本:python-3.6.2-amd64
- 编 者:WordZzzz
前言:
上一篇博文已经介绍了如何从数据集中创建树,然而字典的表示形式非常不易理解,而且直接绘制图形也比较困难。决策树的主要优点就是直观易于理解,如果不能将其直观的显示出来,优势便无从谈起,所以本片博文就介绍一下如何利用Matplotlib库来创建树形图。
Matplotlib注解:
Matplotlib提供了一个非常有用的注解工具annotations,它可以在数据图像上添加文本注解。由于数据上面直接存在文本描述非常丑陋,因此工具内嵌支持带尖头的画线工具,使得我们可以在其他前挡的地方指向数据位置,并在此处添加描述信息,解释数据内容,如下图:
打开文本编辑器,创建名为treePlotter.py的新文件,输入下面的程序代码。
代码实现:
1 | ''' |
输出结果:
1 | import treePlotter |
程序结果如图所示,我们也可以改变函数plotNode(),观察图中x、y的位置如何变化。
构造注解树:
绘制一颗完整的树需要技巧,虽然我们有坐标,但是如何放置所有的树节点却是个问题。所以我们需要知道有多少个叶节点来确定x轴长度;haixuyao知道有多少层来确定y轴的高度。
代码实现:
1 | def getNumLeafs(myTree): |
retrieveTree()主要用于测试,返回预定义的树结构。
1 | def retrieveTree(i): |
输出结果:
1 | reload(treePlotter) |
报(python2.x与python3.x的差异):
1 | TypeError: 'dict_keys' object does not support indexing |
解决(强制类型转换):
Probably this was written with python2.x (when d.keys() returned a list). With python3.x, d.keys() returns a dict_keys object which behaves a lot more like a set than a list. As such, it can’t be indexed.
The solution is to pass list(d.keys()) (or simply list(d)) to shuffle.
我们需要重新编写createPlot()函数,在createPlot0()的基础上进行完善。
代码实现:
1 | def plotMidText(cntrPt, parentPt, txtString): |
输出结果:
1 | reload(treePlotter) |
输出效果如下图所示:
接着按照命令更改字典,重新绘制树形图。
输出结果:
1 | 'no surfacing'][3] = 'maybe' myTree[ |
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz