[置顶] 决策树绘图(二)
由于最近在看机器学习实战,所以自己利用python3去完成里面的代码,此代码衔接着http://blog.csdn.net/xueyunf/article/details/9223865。
在这个基础上进行修改完成了这篇文章的代码,我们知道了决策树的简单构建,ID3算法完成,当然这都很基础,画图呢,只是为了让其更加形象化;我们添加几个函数,一个是输出一棵我们可以利用ID3算法生成的树,一个获取树的叶子节点,一个获取树的深度,这些我想这里就不用讲解了,学过数据结构的童鞋,可以在非常短的时间内实现这些算法;当然我先把这3个函数的代码贴出来:
def getNumLeafs(myTree):numLeafs = 0firstStr = list(myTree.keys())[0]secondDict = myTree[firstStr]for key in secondDict.keys():if type(secondDict[key]).__name__=='dict':numLeafs += getNumLeafs(secondDict[key])else:numLeafs += 1return numLeafsdef getTreeDepth(myTree):maxDepth = 0firstStr = list(myTree.keys())[0]secondDict = myTree[firstStr]for key in secondDict.keys():if type(secondDict[key]).__name__=='dict':thisDepth = 1 + getTreeDepth(secondDict[key])else:thisDepth = 1if thisDepth>maxDepth:maxDepth = thisDepthreturn maxDepthdef retrieveTree(i):listOfTrees = [{'no surfacing':{0:'no', 1:{'flippers':\{0:'no', 1:'yes'}}}},{'no surfacing':{0:'no', 1:{'flippers':\{0:{'head':{0:'no', 1:'yes'}}, 1:'no'}}}}] return listOfTrees[i]
我们不难看出根据定义第一个函数完成获取所有叶子节点的个数,第二个函数完成获取树的高度,第三个函数完成输出树。
然后我们放出这次的主要函数,修改后的绘图函数:
def plotMidText(cntrPt, parentPt, txtString):xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0]yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1]createPlot.ax1.text(xMid, yMid, txtString)def plotTree(myTree, parentPt, nodeTxt):numLeafs = getNumLeafs(myTree)getTreeDepth(myTree)firstStr = list(myTree.keys())[0]cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW,\plotTree.yOff)plotMidText(cntrPt, parentPt, nodeTxt)plotNode(firstStr, cntrPt, parentPt, decisionNode)secondDict = myTree[firstStr]plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalDfor key in secondDict.keys():if type(secondDict[key]).__name__=='dict':plotTree(secondDict[key],cntrPt,str(key))else:plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalWplotNode(secondDict[key], (plotTree.xOff, plotTree.yOff),cntrPt, leafNode)plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalDdef createPlot(inTree):fig = plt.figure(1, facecolor='white')fig.clf()axprops = dict(xticks=[], yticks=[])createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)plotTree.totalW = float(getNumLeafs(inTree))plotTree.totalD = float(getTreeDepth(inTree))plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0;plotTree(inTree, (0.5,1.0), '')plt.show()
最后当然也是截个图给大家看看程序的运行情况:
好了,这里面的函数我想大家可以通过名字也知道每个函数干了些什么。
[置顶] 决策树绘图(二)相关推荐
- 窗口置顶(置于桌面所有程序之上)VC/MFC 怎么将窗口置顶
软件界面全屏显示后,需要把窗体置于其他桌面程序之上,但总是置于其他弹出框之下,会造成用户忽略了导致用户不明什么原因. 百度查了好多方法总是失败. 后来查到了CSND的一个帖子http://bbs.cs ...
- 博客问题[置顶] 程序员的奋斗史(二十)——沉思录(一)——关于博客和思想...
在本篇文章中,我们重要介绍博客问题的内容,自我感到有个不错的建议和大家分享下 写在前面:如果你看到这篇文章,那是缘分.如果你因为这篇文章有所收成,那是我莫大的快慰.请读者静下心来,认真看完本文,阅毕肯 ...
- [置顶] ros的navigation之———gmapping应用详解(in ros)
gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图. 博主最近也一直在使用gmapping,在前期着实被它卡了好久,因为好多东西不明白(原谅我是ros小白). 现 ...
- 用startSmoothScroll实现RecyclerView滚动到指定位置并置顶,含有动画。
RecyclerView滚动到指定位置并置顶 RecyclerView本身提供了几个定位的方法,除了手动滑动的scrollTo,smootScrollTo和scrollBy,smoothScrollB ...
- 阅读目录(置顶)(长期科技领域知识)
第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...
- [置顶] 混响音效
[置顶] 混响音效 1.1混响的作用与基本原理 混响器即是人为地给声音加上混响的效果.这样通过改变场景的混响时间,可以对比较"干"的信号进行再加工,增加空间感,提高声音的丰满度,同 ...
- html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例
本文实例讲述了jQuery简单实现页面元素置顶时悬浮效果的方法.分享给大家供大家参考,具体如下: 一.JS Code: $.fn.smartFloat = function () { var posi ...
- 前端取消置顶功能_短说开发日报:首页推荐频道刷新后首页置顶的数据没有加载出来的问题已修复(9.22周二)...
短说社区论坛系统是想天软件推出的一款集社区论坛.电商商城.知识付费三大版块为一体的整合运营系统 同步支持H5.公众号.安卓.IOS.PC.多渠道小程序(微信.头条.百度.支付宝.QQ) SAAS版本. ...
- wordpress如何设置文章置顶以及区分置顶文章与普通文章
很多博客都有自己的置顶文章,在默认情况下WP对置顶文章只是将它们的位置排在前面,除了位置差异外,跟其他文章是没有任何区别的.那我们怎样才能将它们区别开来呢?我这里有几种方法: 一.在WordPres ...
最新文章
- feign 请求超时,请求没有到服务端
- DataTransmission:免费薅羊毛,Are you kidding me? 镭速传输 “百日计划”提前大曝光!Raysync传输协议要开放?
- SQLServer创建数据库详解
- jzoj1274-游历的路线【分层图,SPFA】
- __construct()和__initialize()
- Wannafly挑战赛23 A	字符串
- 11月女性时尚行业动态:浏览热度走势曲折 起伏大
- 修改sublime 侧边栏 颜色 等
- C#多线程编程实战(二)
- Window.localStorage
- java 数据库连接 释放_JDBC连接数据库和释放连接
- oc实时渲染的图如何导出_最新C4D渲染器全家桶随便用,不仅有OC+阿诺德,还有两款哦...
- 网联兴,银联苦:一文看清支付清算市场新局面的矛盾和疑惑
- uniapp文件体积超过 500KB报错
- 华章教育pdf计算机,AB-PLC华章培训全集.pdf
- Sloth:网易流计算服务化平台架构实践
- 选择率,基数计算公式
- 基于JAVA社区老人健康服务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 从站寄存器EEPROM内容解析之SII(Slave Information Interface)
- 丘成桐科学奖计算机类,丘成桐科学奖