在輸入完程序清單3-5之后運(yùn)行命令:
In [22]:import treePlotter
In [23]:treePlotter.createPlot()
出現(xiàn)錯(cuò)誤:ValueError: Vertical alignment must be one of ('top', 'bottom', 'center', 'baseline')
而并沒(méi)有出現(xiàn)書(shū)上的圖3-5
#該問(wèn)題還沒(méi)解決续扔。
在輸入完程序清單3-6之后,輸入如下命令出現(xiàn)錯(cuò)誤
In [34]:myTree = treePlotter.retrieveTree(0)
In [35]:treePlotter.getNumLeafs(myTree)
TypeError: 'dict_keys' object does not support indexing
在2.7中腋寨,找到key所對(duì)應(yīng)的第一個(gè)元素為:firstStr = myTree.keys()[0],
但這在3.4中運(yùn)行會(huì)報(bào)錯(cuò):'dict_keys' object does not support indexing,這是因?yàn)閜ython3改變了dict.keys,
返回的是dict_keys對(duì)象,支持iterable 但不支持indexable,我們可以將其明確的轉(zhuǎn)化成list际长,
則此項(xiàng)功能在3中應(yīng)這樣實(shí)現(xiàn):
firstSides = list(myTree.keys())
firstStr = firstSides[0]#找到輸入的第一個(gè)元素
def storeTree(inputTree, filename):
import pickle
fw = open(filename, 'wb')
#書(shū)上寫(xiě)的是'w',運(yùn)行出現(xiàn)TypeError: write() argument must be str, not bytes兴泥。
#改為'wb'問(wèn)題解決工育。
pickle.dump(inputTree, fw)
fw.close()
def grabTree(filename):
import pickle
fr = open(filename,'rb')
return pickle.load(fr)
''' fr = open(filename) 書(shū)上沒(méi)有寫(xiě)打開(kāi)方式,會(huì)出現(xiàn)錯(cuò)誤:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
改為fr = open(filename,'rb') 解決問(wèn)題搓彻。
'''
遇到問(wèn)題搜索如下參考:
[機(jī)器學(xué)習(xí)&數(shù)據(jù)挖掘]機(jī)器學(xué)習(xí)實(shí)戰(zhàn)決策樹(shù)plotTree函數(shù)完全解析
機(jī)器學(xué)習(xí)(四)—決策樹(shù)
《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》筆記之三——決策樹(shù)的構(gòu)造