機器學習實戰:樹迴歸中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值。

遞歸本來就是繞來繞去的,不是太好解釋,只能解釋到這了,新手第一次可能犯難,熟練了很好懂。
"""


發佈了33 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章