決策樹-獲得葉節點的數目和樹的層數
阿新 • • 發佈:2021-11-22
現在我們要獲取葉節點和深度,以便後面畫圖
對於葉節點,思路如下
{'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
- 對於這樣的字典,我們先得到根節點
- 然後得到根節點下面的字典
- 這個字典可能是空的,對這個字典進行遍歷,如果裡面有字典則遍歷,無字典則進行葉節點+1
- 最後返回葉節點個數
def getNumLeafs(myTree): # 首先得到根節點 # firstNode = myTree.keys()[0] # 不能直接對keys進行索引,需先轉化成list firstNode = list(myTree.keys())[0] # print(firstNode) # 得到no surfacing # 獲得根節點對應的字典 secondDict = myTree[firstNode] # 對這個字典進行遍歷,如果裡面還有字典那就繼續遍歷 numLeafs = 0 for key in secondDict.keys(): if type(secondDict[key]) == dict: numLeafs += getNumLeafs(secondDict[key]) else: # 如果沒有了那麼葉節點數量 + 1 numLeafs += 1 return numLeafs
myTree = {'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
print(getNumLeafs(myTree))
3
def getTreeDepth(myTree): # 首先得到根節點 # firstNode = myTree.keys()[0] # 不能直接對keys進行索引,需先轉化成list firstNode = list(myTree.keys())[0] # print(firstNode) # 得到no surfacing # 獲得根節點對應的字典 secondDict = myTree[firstNode] # 對這個字典進行遍歷,如果裡面還有字典那就繼續遍歷 # 樹的深度要去掉根節點 maxDepth = 0 for key in secondDict.keys(): if type(secondDict[key]) == dict: tempDeth = 1 + getTreeDepth(secondDict[key]) else: tempDeth = 1 if tempDeth > maxDepth: maxDepth = tempDeth return maxDepth
myTree = {'no surfacing':{0:'no',1:{'flippers':{0:'no',1:'yes'}}}}
print(getTreeDepth(myTree))
2