《机器学习实战》-决策树-画决策树图

def 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.建立图像载体。

2.axprops 暂不清楚什么意思。

3.建立全局函数建立图框。

4.建立全局变量,当前总树结构的叶节点数和树层数。

5.计算每次画分支的基准偏移量。上步骤和此步骤主要是为了保证树能够在整个图的中间,如何进行后面会在进行说明。

6.以(初始树结构数据,根节点坐标,无两节点间文本信息)为输入,执行画树函数。

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.tatalW,plottree.yoff)
    plotmidtext(cntrpt,parentpt,nodetxt)
    plotnode(firststr,cntrpt,parentpt,decisionnode)
    seconddict = mytree[firststr]
    plottree.yoff=plottree.yoff - 1.0/plottree.totalD
    for key in seconddict.keys():
        plottree(seconddict[key],cntrpt,str(key))
    else:
        plottree.xoff =plottree.xoff+1.0/plottree.totalW
        plotnode(seconddict[key],(plottree.xoff,lottree.yoff),cntrpt,leafnode)
        plotmidtext((plottree.xoff,plottree.totalD))
    plottree.yoff=plottree.yoff+1/plottree.totalD

mytree=retrieveTree(0)此函数为画树函数

输入变量为树数据,父节点,节点间信息。因为此函数为递归函数,先考虑由上一步接下的第一次执行

1.得到当前数据的叶子数和层数,第一次循环时,应与总树结构相同。

2.得到当前树结构最外层特征

3.得到待画子节点的坐标。根据上一个函数求得,基准x偏移量为0.5/叶子数,实际上是将0.5区间划分为叶子数份,每份的长度的负值即为基准x偏移;基础y偏移量为1。该子节点的x坐标,为当前剩余叶节点与总叶节点的比值/2+1+基准x偏移量 。

4.标记子父节点判定值、箭头和节点属性

5.保存当前父节点字典值(剩余结构树信息)

6.对当前字典进行循环寻值,判定当前是否还是字典(是否还有树分支)。如果仍然是字典,则继续画,进行递归。否则的话将x偏移量加上总叶节点数分之一,并标记子父节点判定值、箭头和节点属性

7.循环结束后y偏移量+总层数分之一


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值