• 大小: 6KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Python
  • 标签: python  机器学习  

资源简介

treePlotter 绘制树 机器学习matplotlib可能的绘制需要。哈哈哈哈 .... 积分太高啦

资源截图

代码片段和文件信息

‘‘‘
Created on Aug 14 2017
@author: WordZzzz
‘‘‘

import matplotlib.pyplot as plt

#定义文本框和箭头格式
decisionNode = dict(boxstyle=“sawtooth“ fc=“0.8“)
leafNode = dict(boxstyle=“round4“ fc=“0.8“)
arrow_args = dict(arrowstyle=“<-“)

def getNumLeafs(myTree):
“““
Function: 获取叶节点的数目
Args: myTree:树信息
Returns: numLeafs:叶节点的数目
“““
#初始化叶节点数目
numLeafs = 0
#第一个关键字为第一次划分数据集的类别标签,附带的取值表示子节点的取值
firstStr = list(myTree.keys())[0]
#新的树,相当于脱了一层皮
secondDict = myTree[firstStr]
for key in secondDict.keys():
#判断子节点是否为字典类型
if type(secondDict[key]).__name__==‘dict‘:
#是的话表明该节点也是一个判断节点,递归调用getNumLeafs()函数
numLeafs += getNumLeafs(secondDict[key])
else:
#不是的话表明到头了,赋值累加1
numLeafs += 1
#返回叶节点数目
return numLeafs

def getTreeDepth(myTree):
“““
Function: 获取树的层数
Args: myTree:树信息
Returns: maxDepth:最大层数
“““
#初始化最大层数
maxDepth = 0
#第一个关键字为第一次划分数据集的类别标签,附带的取值表示子节点的取值
firstStr = list(myTree.keys())[0]
#新的树,相当于脱了一层皮
secondDict = myTree[firstStr]
for key in secondDict.keys():
#判断子节点是否为字典类型
if type(secondDict[key]).__name__==‘dict‘:
#是的话表明该节点也是一个判断节点,递归调用getTreeDepth()函数
thisDepth = 1 + getTreeDepth(secondDict[key])
else:
#不是的话表明到头了,此时赋值为1
thisDepth = 1
if thisDepth > maxDepth: maxDepth = thisDepth
#返回最大层数
return maxDepth

def plotNode(nodeTxt centerPt parentPt nodeType):
“““
Function: 绘制带箭头的注解
Args: nodeTxt:文本注解
centerPt:箭头终点坐标
parentPt:箭头起始坐标
nodeType:文本框类型
Returns: 无
“““
#在全局变量createPlot.ax1中绘图
createPlot.ax1.annotate(nodeTxt xy=parentPt  xycoords=‘axes fraction‘
 xytext=centerPt textcoords=‘axes fraction‘
 va=“center“ ha=“center“ bbox=nodeType arrowprops=arrow_args )
#在全局变量createPlot0.ax1中绘图
# createPlot0.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):
“““
Function: 在父子节点间填充文本信息
Args: cntrPt:树信息
parentPt:父节点坐标
txtString:文本注解
Returns: 无
“““
xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0]
yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1]
createPlot.ax1.text(xMid yMid txtString va=“center“ ha=“center“ rotation=30)

def plotTree(myTree parentPt nodeTxt):#if the first key tells you what feat was split on
“““
Function: 创建数据集和标签
Args: myTree:树信息
parentPt:箭头起始坐标
nodeTxt:文本注解
Returns: 无
“““
#计算树的宽
numLeafs = getNumLeafs(myTree)  #this determines the x width of

评论

共有 条评论