测试算法:使用决策树执行分类
_# 使用决策树对测试数据进行分类<br />_def classify(inputTree,featLabels,testVec):<br /> firstStr = list(inputTree.keys())[0] _# 获取根节点<br /> _secondDict = inputTree[firstStr] _# 获取子树<br /> _featIndex = featLabels.index(firstStr) _#<br /> _for key in secondDict.keys():<br /> if testVec[featIndex] == key:<br /> if type(secondDict[key]).__name__ == "dict":<br /> classLabel = classify(secondDict[key],featLabels,testVec)<br /> else:<br /> classLabel = secondDict[key]<br /> return classLabel
调用及结果:
dataSet, labels = createDataSet()<br />tree = dt.createTree(dataSet, labels)<br />_# 重新获取labels列表,因为在creatTree()函数中会对labels列表进行更改<br />_dataSet1, labels1 = createDataSet()<br />classLabel = classify(tree,labels1,[0,1])<br />print("特征值为",[0,1],"的预测类别为:",classLabel)
决策树的存储
构造决策树很耗时,数据集越大构造的时间就越长。如果每次对数据进行预测都需要重新构造决策树将会浪费很多时间在一次又一次的创建决策树上,而在对数据进行预测时使用已经创建好的决策树将会节省很多时间。故需要对构建好的决策树进行存储,使得在每次执行对数据的预测任务时能够直接调用,节省时间。
通过python模块pickle序列化对象。_# 对决策树进行存储<br /># 存储<br />_def storeTree(inputTree,filename):<br /> import pickle<br /> print("inputTree = ",inputTree)<br /> filewrite = open(filename,'wb') _# 创建文件对象<br /> _pickle.dump(inputTree,filewrite)<br /> filewrite.close()<br /> print("存储完成")<br />_# 读取<br />_def grabTree(filename):<br /> import pickle<br /> fileread = open(filename,'rb')<br /> print("读取完成")<br /> return pickle.load(fileread)
调用及结果:
storeTree(tree,"myTree.txt")<br />read_tree = grabTree("myTree.txt")<br />print("readfile_tree = ",read_tree)

