由于最近在看机器学习实战,所以自己利用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()

最后当然也是截个图给大家看看程序的运行情况:

好了,这里面的函数我想大家可以通过名字也知道每个函数干了些什么。

[置顶] 决策树绘图(二)相关推荐

  1. 窗口置顶(置于桌面所有程序之上)VC/MFC 怎么将窗口置顶

    软件界面全屏显示后,需要把窗体置于其他桌面程序之上,但总是置于其他弹出框之下,会造成用户忽略了导致用户不明什么原因. 百度查了好多方法总是失败. 后来查到了CSND的一个帖子http://bbs.cs ...

  2. 博客问题[置顶] 程序员的奋斗史(二十)——沉思录(一)——关于博客和思想...

    在本篇文章中,我们重要介绍博客问题的内容,自我感到有个不错的建议和大家分享下 写在前面:如果你看到这篇文章,那是缘分.如果你因为这篇文章有所收成,那是我莫大的快慰.请读者静下心来,认真看完本文,阅毕肯 ...

  3. [置顶] ros的navigation之———gmapping应用详解(in ros)

    gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图.  博主最近也一直在使用gmapping,在前期着实被它卡了好久,因为好多东西不明白(原谅我是ros小白).  现 ...

  4. 用startSmoothScroll实现RecyclerView滚动到指定位置并置顶,含有动画。

    RecyclerView滚动到指定位置并置顶 RecyclerView本身提供了几个定位的方法,除了手动滑动的scrollTo,smootScrollTo和scrollBy,smoothScrollB ...

  5. 阅读目录(置顶)(长期科技领域知识)

    第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...

  6. [置顶] 混响音效

    [置顶] 混响音效 1.1混响的作用与基本原理 混响器即是人为地给声音加上混响的效果.这样通过改变场景的混响时间,可以对比较"干"的信号进行再加工,增加空间感,提高声音的丰满度,同 ...

  7. html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例

    本文实例讲述了jQuery简单实现页面元素置顶时悬浮效果的方法.分享给大家供大家参考,具体如下: 一.JS Code: $.fn.smartFloat = function () { var posi ...

  8. 前端取消置顶功能_短说开发日报:首页推荐频道刷新后首页置顶的数据没有加载出来的问题已修复(9.22周二)...

    短说社区论坛系统是想天软件推出的一款集社区论坛.电商商城.知识付费三大版块为一体的整合运营系统 同步支持H5.公众号.安卓.IOS.PC.多渠道小程序(微信.头条.百度.支付宝.QQ) SAAS版本. ...

  9. wordpress如何设置文章置顶以及区分置顶文章与普通文章

    很多博客都有自己的置顶文章,在默认情况下WP对置顶文章只是将它们的位置排在前面,除了位置差异外,跟其他文章是没有任何区别的.那我们怎样才能将它们区别开来呢?我这里有几种方法:  一.在WordPres ...

最新文章

  1. feign 请求超时,请求没有到服务端
  2. DataTransmission:免费薅羊毛,Are you kidding me? 镭速传输 “百日计划”提前大曝光!Raysync传输协议要开放?
  3. SQLServer创建数据库详解
  4. jzoj1274-游历的路线【分层图,SPFA】
  5. __construct()和__initialize()
  6. Wannafly挑战赛23 A 字符串
  7. 11月女性时尚行业动态:浏览热度走势曲折 起伏大
  8. 修改sublime 侧边栏 颜色 等
  9. C#多线程编程实战(二)
  10. Window.localStorage
  11. java 数据库连接 释放_JDBC连接数据库和释放连接
  12. oc实时渲染的图如何导出_最新C4D渲染器全家桶随便用,不仅有OC+阿诺德,还有两款哦...
  13. 网联兴,银联苦:一文看清支付清算市场新局面的矛盾和疑惑
  14. uniapp文件体积超过 500KB报错
  15. 华章教育pdf计算机,AB-PLC华章培训全集.pdf
  16. Sloth:网易流计算服务化平台架构实践
  17. 选择率,基数计算公式
  18. 基于JAVA社区老人健康服务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署
  19. 从站寄存器EEPROM内容解析之SII(Slave Information Interface)
  20. 丘成桐科学奖计算机类,丘成桐科学奖

热门文章

  1. 量子信息技术研究现状与未来
  2. 前沿科技 | 中科院科学家研究揭示奥陶纪末生命大灭绝新机制
  3. 创新是低情商的人做的
  4. 时空大数据赋能智慧城市的思考和实践
  5. 高通首次推出AI引擎 打包所有软硬件算力
  6. 财报上的云计算战场: 巨头们垄断加剧
  7. 美国12大科技公司如何参与自动驾驶?
  8. 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%
  9. “拒绝在 iPad 上运行 Xcode!”
  10. 离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员