测试算法:使用决策树执行分类
依靠训练数据构造了决策树之后,我们可以将它用于实际数据的分类。在执行数据分类时,需要决策树以及用于构造树的标签向量。然后,程序比较测试数据与决策树上的数值,递归执行该过程直到进入叶子节点;最后将测试数据定义为叶子节点所属的类型
使用决策树的分类函数 (在tree.py的基础上添加)
在存储带有特征的数据会面临一个问题:程序无 法 确 定特征 在 数 据集中 的 位 置,例 如 前 面例子 的 第 一个用 于 划 分数据 集 的 特征是no surfacing
属性,但是在实际数据集中该属性存储在哪个位置?是第一个属性还是第二个属性?
特征标签列表将帮助程序处理这个问题。使用index方法查找当前列表中第一个匹配firstStr
变量的元素 。然后代码递归遍历整棵树,比较testVec
变量中的值与树节点的值,如果到达叶子节点,则返回当前节点的分类标签
# 决策树分类函数
def classify(inputTree,featLabels,testVec):
# 得到树中的第一个特征
firstStr = inputTree.keys()[0]
# 得到第一个对应的值
secondDict = inputTree[firstStr]
# 得到树中第一个特征对应的索引
featIndex = featLabels.index(firstStr)
# 遍历树
for key in secondDict.keys():
# 如果在secondDict[key]中找到testVec[featIndex]
if testVec[featIndex] == key:
# 判断secondDict[key]是否为字典
if type(secondDict[key]).__name__ == 'dict':
# 若为字典,递归的寻找testVec
classLabel = classify(secondDict[key], featLabels, testVec)
else:
# 若secondDict[key]为标签值,则将secondDict[key]赋给classLabel
classLabel = secondDict[key]
# 返回类标签
return classLabel
网友评论