在输入完程序清单3-5之后运行命令:
In [22]:import treePlotter
In [23]:treePlotter.createPlot()
出现错误:ValueError: Vertical alignment must be one of ('top', 'bottom', 'center', 'baseline')
而并没有出现书上的图3-5
#该问题还没解决。
在输入完程序清单3-6之后,输入如下命令出现错误
In [34]:myTree = treePlotter.retrieveTree(0)
In [35]:treePlotter.getNumLeafs(myTree)
TypeError: 'dict_keys' object does not support indexing
在2.7中,找到key所对应的第一个元素为:firstStr = myTree.keys()[0],
但这在3.4中运行会报错:'dict_keys' object does not support indexing,这是因为python3改变了dict.keys,
返回的是dict_keys对象,支持iterable 但不支持indexable,我们可以将其明确的转化成list,
则此项功能在3中应这样实现:
firstSides = list(myTree.keys())
firstStr = firstSides[0]#找到输入的第一个元素
def storeTree(inputTree, filename):
import pickle
fw = open(filename, 'wb')
#书上写的是'w',运行出现TypeError: write() argument must be str, not bytes。
#改为'wb'问题解决。
pickle.dump(inputTree, fw)
fw.close()
def grabTree(filename):
import pickle
fr = open(filename,'rb')
return pickle.load(fr)
''' fr = open(filename) 书上没有写打开方式,会出现错误:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
改为fr = open(filename,'rb') 解决问题。
'''
遇到问题搜索如下参考:
[机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析
机器学习(四)—决策树
《机器学习实战》笔记之三——决策树的构造