如果您想从头开始实现决策树,我建议您使用类来构建树。一棵树由节点组成,其中一个节点包含递归节点和叶子节点是终端节点。对于二叉树的情况,这些类可以是以下内容:
class Node(object):
def __init__(self):
self.split_variable = None
self.left_child = None
self.right_child = None
def get_name(self):
return 'Node'
class Leaf(object):
def __init__(self):
self.value = None
def get_name(self):
return 'Leaf'
对于Node类:'split_variable'将包含拆分中使用的变量名称,即:[a,t,g,c],'left_child'和'right_child'将是Node或Leaf的新实例。该变量的True/False存在将映射到左/右子级。(在回归树的情况下,您需要向Node类添加第四个变量'split_value',并将小于/大于此值的内容映射到左/右子级)。
对于Leaf类:'value'包含分配给树类变量的值(例如,在离散变量的情况下为多数,在连续变量的情况下为平均值)。
要完成实现,您需要编写函数来遍历树并对其进行评估和/或可视化。这些函数将递归调用以完成树的遍历。在这里,您可以利用类的get_name()函数来区分节点和叶子。要实现此部分,实际上取决于您如何存储数据,建议使用
pandas DataFrames,它们类似于表格。示例评估函数可能如下(伪代码):
def evaluate_tree(your_data, node):
if your_data[node.split_variable]:
if node.left_child.get_name() == 'Node':
evaluate_tree(your_data, node.left_child)
elif node.left_child.get_name() == 'Leaf':
return node.left_child.value
else:
if node.right_child.get_name() == 'Node':
evaluate_tree(your_data, node.right_child)
elif node.right_child.get_name() == 'Leaf':
return node.right_child.value
祝你好运!