机器学习实战:树回归中getMean()递归解释



若有帮助到你,记得点赞、收藏哦!

# -*- coding: utf-8 -*-
"""
Created on Thu Mar 22 20:33:41 2018

@author: Loulch C.C
"""

"""
T
                                   0.5
                                l /   \r
                               0.49    0.51
                            l /   \ r l /   \r
                         0.490 0.491 0.510 0.511

"""

T={'spi':0,'spv':0.5,'r':{'spi':0,'spvl':0.51,'r':0.511,'l':0.510},'l':{'spi':0,'spv':0.49,'r':0.491,'l':0.490}}

def isTree(obj):
    """
    函数说明:测试输入变量是否为一棵树
    """
    return (type(obj).__name__=='dict') #判断为字典类型返回true

def getMean(tree):
    """
    函数说明:从上往下遍历树直到找到叶节点为止,若找到两个叶节点,计算他们的平均值
    返回值:树的平均值(对树进行塌陷式处理)
    """
    if isTree(tree['r']):
        tree['r'] = getMean(tree['r'])
        print(tree['r'])
    if isTree(tree['l']):
        tree['l'] = getMean(tree['l'])
        print(tree['l'])
    return (tree['l']+tree['r'])/2.0

print(getMean(T))
"""
输出:
dict
True
float
False
float
False
0.5105
dict
True
float
False
float
False
0.4905
0.5005

递归过程如下:
计算getMean
先判断r0.51,是,递归getMean:接着判断r0.511,否;又接着l0.510,否;说明第一个r的递归到头,计算getMean值。
再判断r0.49,是,递归getMean:接着判断r0.491,否;又接着l0.490,否;说明第一个l的递归到头,计算getMean值。
最后,计算getMean值。

递归本来就是绕来绕去的,不是太好解释,只能解释到这了,新手第一次可能犯难,熟练了很好懂。
"""


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值