如何存储决策树

5
我尝试了几种不同的方法,其中一些是在这里找到的,包括制作一个节点类和嵌套字典,但我似乎无法使它们起作用。
我的代码目前接收几行DNA(a,t,g,c)并将它们存储为numpy数组。然后它找到给出最大增益的属性,并将数据分成4个新的numpy数组(取决于属性中是否存在a,t,g或c)。
我无法创建一个递归函数来构建树。我对Python和编程本身都很陌生,请详细描述我应该做什么。
感谢任何帮助

也许这里可以帮到你:https://dev59.com/S1TTa4cB1Zd3GeqPq0id?rq=1 - Jivan
你能否提供一个更详细的例子,说明逻辑如何运作? - Cam
3个回答

6
如果您想从头开始实现决策树,我建议您使用类来构建树。一棵树由节点组成,其中一个节点包含递归节点和叶子节点是终端节点。对于二叉树的情况,这些类可以是以下内容:
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

祝你好运!


2

可能字典是你想要的:

节点的一个例子是:

{'sex': {'yes': 'send email', 'no': 'not send email'}}

1
如果您想在Python中使用决策树,可以使用Sci-kit learn的决策树模块,而不是编写自己的决策树类和逻辑: http://scikit-learn.org/stable/modules/tree.html。使用Scikit Learn决策树模块,您可以将决策树对象保存到内存中,或者将树的某些属性写入文件或数据库。
Sci-kit learn以及Anacondas包中的其他Python库基本上是Python中数据探索和分析的标准。您可以从Continuum下载Anaconda包:http://continuum.io/downloads 编辑1 我在Hacker News上看到了这篇文章。它介绍了如何使用PostgreSQL作为数据库来构建Python中的决策树。可能值得一看:http://www.garysieling.com/blog/building-decision-tree-python-postgres-data

这正是我想要的,但我真的很想学习如何自己实现决策树。我已经向一些同行程序员询问过,他们建议使用类。然而,我仍然有点不清楚如何实现“class Node:”以获得我想要的结果。 - user3312146
一个很好的起点是下载scikit-learn源代码并查看他们如何实现决策树 - 这是我之前使用Numpy和矩阵乘法做过的事情。你可能不会编写像scikit-learn那样快速或优化的代码,但你会理解它是如何实现的。 - Chris Clouten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接