字典树
tree = {'WenLi': {'ShaoHu': {'ChuGan': {'YingHua': 'No', 'RuanNian': 'Yes'}},
'QingXi': {'MiDu': {'Da': 'Yes', 'Xiao': 'No'}},
'MoHu': 'No'}}
1. 递归查找算法
- 对于字典树, 第一层是属性列的值, 第二层是属性的取值
- 对于测试字典, 第一层是属性列, 第二层是属性列的取值
- 取生成树第一层属性列, 和第二层属性的取值, 属性值于测试集中对应列进行比较
- 相等的时候, 判断属性的下一层的值是不是字典, 如果是字典, 则递归子树, 返回子树的结果
- 下一层不是字典, 而是取值的时候, 返回值
def match_class(decision_tree: "建立的生成树", dict_test: "测试的数据集") -> "返回判断后的类别":
"""
根据生成的决策时进行预测
1. 对于字典树, 第一层是属性列的值, 第二层是属性的取值
2. 对于测试字典, 第一层是属性列, 第二层是属性列的取值
3. 取生成树第一层属性列, 和第二层属性的取值, 属性值于测试集中对应列进行比较
1). 相等的时候, 判断属性的下一层的值是不是字典, 如果是字典, 则递归子树,
2). 下一层不是字典, 而是取值的时候 返回
4. 返回结果集为class_label
:param decision_tree: 建立的决策树
:param dict_test: : 测试集字典
:return: 返回生成树的分类
"""
root_column = list(decision_tree.keys())[0]
second_dict = decision_tree[root_column]
for key in second_dict.keys():
if key == dict_test[root_column]:
if type(second_dict[key]).__name__ == "dict":
return match_class(second_dict[key], dict_test)
else:
return second_dict[key]
pass
2. 测试
- 测试用例
if __name__ == '__main__':
tree = {'WenLi': {'ShaoHu': {'ChuGan': {'YingHua': 'No', 'RuanNian': 'Yes'}},
'QingXi': {'MiDu': {'Da': 'Yes', "Xiao": 'No'}},
'MoHu': 'No'}}
dict_test = {
"SeZe": "Wuhei",
"GenDi": "QuanSuo",
"QiaoSheng": "ZhuoXiang",
"WenLi": "MoHu",
"QiBu": "ShaoAo",
"ChuGan": "RuanNian",
}
result_class = match_class(tree, dict_test)
print("预测的结果为: ", result_class)
3. 结果
预测的结果为: No