目录
1. 测试算法:使用决策树执行分类
在执行数据分类时,需要使用决策树以及用于构造决策树的标签向量。然后,程序比较测试数据与决策树上的数值,递归执行该过程直到进入叶子节点;最后将测试数据定义为叶子节点所属的类型。
def classify(inputtree, featlabels, testvec):
firststr = list(inputtree.keys())[0]
seconddict = inputtree[firststr]
featindex = featlabels.index(firststr)
for key in seconddict.keys():
if testvec[featindex] == key:
if type(seconddict[key]).__name__ == 'dict':
classlabel = classify(seconddict[key], featlabels, testvec)
else: classlabel = seconddict[key]
return classlabel
mydata, labels = trees.createDataSet()
print("labels:", labels)
mytree = treePlotter.retrieveTree(0)
print("mytree:", mytree)
print(classify(mytree, labels, [1, 0]))
print(classify(mytree, labels, [1, 1]))
输出结果:
2. 使用算法:决策树的存储
为了节省时间,最好能够在每次执行分类时调用已经够造好的决策树。需要使用Python模块pickle序列化对象。序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何对象都可以执行序列化操作,字典对象也不例外。
"使用pickle模块存储决策树"
def storetree(inputtree, filename):
import pickle
fw = open(filename, 'wb')
pickle.dump(inputtree, fw)
fw.close()
def grabtree(filename):
import pickle
fr = open(filename, 'rb')
return pickle.load(fr)
storetree(mytree, 'classifierstorage.txt')
grabtree('classifierstorage.txt')