机器学习实战——决策树:matplotlib绘图
来源:互联网 发布:陕西广电网络换门庭 编辑:程序博客网 时间:2024/04/30 10:35
书籍:《机器学习实战》中文版
IDE:PyCharm Edu 4.02
结果:
(1)使用type().__name__
IDE:PyCharm Edu 4.02
环境:Adaconda3 python3.6
第一个例子:
import matplotlib.pyplot as plt#定义文本框和箭头格式decisionNode = dict(boxstyle="sawtooth",fc="0.8")leafNode = dict(boxstyle="round4",fc="0.8")arrow_args = dict(arrowstyle="<-") #使用反转箭头# 绘制带箭头的注解def plotNode(nodeTxt,centerPt,parentPt,nodeType): createPlot.ax1.annotate(nodeTxt,xy=parentPt,xycoords='axes fraction', xytext=centerPt,textcoords='axes fraction', va="center",ha="center",bbox=nodeType,arrowprops=arrow_args)# 主函数def createPlot(): fig = plt.figure(1,facecolor='white') fig.clf() createPlot.ax1 = plt.subplot(111,frameon=False) plotNode('a decision node',(0.5,0.1),(0.1,0.5),decisionNode) plotNode('a leaf node',(0.8,0.1),(0.3,0.8),leafNode) plt.show()print(createPlot())
结果:
注释:
关于matplotlib中的annotate:http://matplotlib.org/users/annotations_intro.html
第二个例子:
import matplotlib.pyplot as plt# 得到叶子节点数目 以便确定x轴范围def getNumLeafs(mytree): numLeafs = 0 firstStr = list(mytree.keys())[0] secondDict = mytree[firstStr] for key in secondDict.keys(): if type(secondDict[key]).__name__=='dict': numLeafs += getNumLeafs(secondDict[key]) else: numLeafs += 1 return numLeafs# 得到树的深度 以便确定y轴范围# 即树(字典)中字典类型的数目def getTreeDepth(myTree): maxDepth = 0 firstStr = 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 = 1 if thisDepth>maxDepth: maxDepth = thisDepth return maxDepth# 预先存储树的信息def 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]#定义文本框和箭头格式decisionNode = dict(boxstyle="sawtooth",fc="0.8")leafNode = dict(boxstyle="round4",fc="0.8")arrow_args = dict(arrowstyle="<-") #使用反转箭头# 绘制带箭头的注解def plotNode(nodeTxt,centerPt,parentPt,nodeType): createPlot.ax1.annotate(nodeTxt,xy=parentPt,xycoords='axes fraction', xytext=centerPt,textcoords='axes fraction', va="center",ha="center",bbox=nodeType,arrowprops=arrow_args)#文本信息的填充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) #depth = 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) #cntrPt,parentPt坐标相同时,不绘制箭头。 secondDict = myTree[firstStr] plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD for key in secondDict.keys(): if type(secondDict[key]).__name__=='dict': plotTree(secondDict[key],cntrPt,str(key)) else: plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW plotNode(secondDict[key],(plotTree.xOff, plotTree.yOff),cntrPt,leafNode) plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key)) plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD# 主函数def createPlot(inTree): fig = plt.figure() 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()print(createPlot(retrieveTree(0)))
结果:
小结—类型的判断问题:
(1)使用type().__name__
比如本文中的使用
for key in secondDict.keys(): if type(secondDict[key]).__name__=='dict': numLeafs += getNumLeafs(secondDict[key]) else: numLeafs += 1
(2)使用isinstance
比如上一篇中决策树分类函数的定义
def classify(inputTree,featLabels,testVec): firstStr = list(inputTree.keys())[0] secondDict = inputTree[firstStr] featIndex = featLabels.index(firstStr) key = testVec[featIndex] valueOfFeat = secondDict[key] if isinstance(valueOfFeat,dict): classLabel = classify(valueOfFeat,featLabels,testVec) else: classLabel = valueOfFeat return classLabel
阅读全文
0 0
- 机器学习实战——决策树:matplotlib绘图
- 《机器学习实战》—决策树
- 从零开始机器学习实战2-Matplotlib绘图
- 机器学习实战——决策树
- 《机器学习实战》——决策树
- 机器学习python实战——决策树
- 《机器学习实战》——决策树代码
- 《机器学习实战》——决策树
- 机器学习实战——决策树讲解
- 决策树——python(机器学习实战)
- 机器学习实战——决策树
- 机器学习实战——决策树
- 机器学习实战—决策树(二)
- 机器学习-Matplotlib绘制决策树
- 机器学习实战python版决策树以及Matplotlib注解绘制决策树
- 机器学习实战python版决策树以及Matplotlib注解绘制决策树
- 机器学习实战---决策树
- 机器学习实战-决策树
- Android——第三方QQ登录
- android+MVP+Retrofit+RxJava做网络请求
- 计数控制的循环
- Android Studio使用技巧
- 【java集合】ArrayList源码分析
- 机器学习实战——决策树:matplotlib绘图
- pat甲级1009:Product of Polynomials
- n个阶层相加
- 6.4平方和立方
- Vue-路由导航菜单栏的高亮设置
- 地球椭球体
- (2)计算1*2*3+3*4*5+......+99*100*101的值。
- 【百度爬虫系列 I】多关键字图片搜索结果汇总
- HTML-3