📅  最后修改于: 2023-12-03 15:42:19.079000             🧑  作者: Mango
在本问题中,我们需要实现基于决策树的分类器的一些功能。以下是决策树节点结构的类定义:
class TreeNode:
def __init__(self, attribute):
self.attribute = attribute
self.children = {}
self.answer = ""
其中,attribute 表示这个节点关联的属性;children 是子节点的 set;answer 是与这个节点相连的答案。例如,如果一个根节点关联的属性是色泽(Color),颜色是红(Red)的商品到达了这个节点,从这个节点到叶子节点的路径上应该有一个 answer,例如“是一个好瓜”(Good)或“是一个坏瓜”(Bad)。
现在有一个已经构建好的决策树,你需要实现以下函数:
def predict(node, sample):
'''
预测给定样本的标签
参数:
node: TreeNode,决策树节点
sample: list, 样本list,如['青绿', '蜷缩', '浊响', '清晰', '凹陷', '软粘']
返回值:
string,表示预测的标签
'''
pass
这个函数应该输出从给定 node 开始经过样本 sample 所得到的最后一级叶子节点的 answer。例如,如果包含('青绿','蜷缩','浊响','清晰','凹陷','硬滑')的样本落在了决策树上一个叶子节点,这个叶子节点的 answer 是“好瓜”,那么 predict 函数应该返回“Good”。
首先我们可以用 markdown 文档格式化上述内容,方便程序员阅读:
在本问题中,我们需要实现基于决策树的分类器的一些功能。以下是决策树节点结构的类定义:
class TreeNode:
def __init__(self, attribute):
self.attribute = attribute
self.children = {}
self.answer = ""
其中,attribute 表示这个节点关联的属性;children 是子节点的 set;answer 是与这个节点相连的答案。例如,如果一个根节点关联的属性是色泽(Color),颜色是红(Red)的商品到达了这个节点,从这个节点到叶子节点的路径上应该有一个 answer,例如“是一个好瓜”(Good)或“是一个坏瓜”(Bad)。
现在有一个已经构建好的决策树,你需要实现以下函数:
def predict(node, sample):
'''
预测给定样本的标签
参数:
node: TreeNode,决策树节点
sample: list, 样本list,如['青绿', '蜷缩', '浊响', '清晰', '凹陷', '软粘']
返回值:
string,表示预测的标签
'''
pass
这个函数应该输出从给定 node 开始经过样本 sample 所得到的最后一级叶子节点的 answer。例如,如果包含('青绿','蜷缩','浊响','清晰','凹陷','硬滑')的样本落在了决策树上一个叶子节点,这个叶子节点的 answer 是“好瓜”,那么 predict 函数应该返回“Good”。
接下来,我们可以开始撰写预测函数 predict 的实现:
def predict(node, sample):
if not node.children:
return node.answer
attribute = node.attribute
if sample[attribute] in node.children:
return predict(node.children[sample[attribute]], sample)
return node.answer
当传入的决策树节点的 children 为空时,表示此节点为叶子节点,我们直接返回 answer。否则,我们获取 attribute,判断 sample[attribute] 是否在 children 中。如果在,则我们继续向下遍历,否则我们返回 answer。