Python 如何存储决策树

Python 如何存储决策树,python,python-2.7,decision-tree,Python,Python 2.7,Decision Tree,我尝试了几种不同的方法,其中一些是我在这里找到的,包括创建节点类和嵌套字典,但我似乎无法让它们工作 我的代码目前接收了几行DNA(a、t、g、c),然后存储为numpy数组。然后,它会找到增益最大的属性,并将数据拆分为4个新的numpy数组(取决于属性处存在的a、t、g或c) 我无法生成可以构建树的递归函数。我对python和编程本身都很陌生,所以请详细描述我应该做什么 感谢您的帮助如果您希望在python中使用决策树,您可以使用Sci工具包学习中的决策树模块,而不是编写自己的决策树类和逻辑:。

我尝试了几种不同的方法,其中一些是我在这里找到的,包括创建节点类和嵌套字典,但我似乎无法让它们工作

我的代码目前接收了几行DNA(a、t、g、c),然后存储为numpy数组。然后,它会找到增益最大的属性,并将数据拆分为4个新的numpy数组(取决于属性处存在的a、t、g或c)

我无法生成可以构建树的递归函数。我对python和编程本身都很陌生,所以请详细描述我应该做什么


感谢您的帮助

如果您希望在python中使用决策树,您可以使用Sci工具包学习中的决策树模块,而不是编写自己的决策树类和逻辑:。使用Scikit学习决策树模块,您可以将决策树对象保存到内存中,或者将树的某些属性写入文件或数据库

Sci kit learn以及作为Anacondas包一部分的其他python库几乎都是python中数据探索和分析的标准。您可以从Continuum获得Anaconda软件包:

编辑1

我是在黑客新闻上看到的。它是关于使用PostgreSQL作为从中提取值的数据库,在Python中构建决策树。结帐时可能会感兴趣:

如果您想从头开始实现决策树,我建议您使用类构建决策树。树由节点组成,其中一个节点递归地包含节点,而叶子是终端节点。对于二叉树,这些类可以是:

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'
对于节点类:“split_variable”将包含拆分中使用的变量名,即:[a、t、g、c],而“left_child”和“right_child”将是节点或叶的新实例。该变量的真/假存在将映射到左/右子级。(对于回归树,您需要向节点类“split_value”添加第四个变量,并将小于/大于此值的值映射到左/右子级)

对于叶类:“值”包含树类变量的赋值(即离散变量的多数值或连续变量的平均值)

为了完成您的实现,您需要函数来遍历您的树,并对其进行评估和/或可视化。这些函数将被递归调用以完成遍历树。在这里,您可以使用类的get_name()函数来区分节点和叶。要实现这一部分,它实际上取决于您如何存储数据,我建议您使用类似于表的数据帧。示例求值函数可以是(伪代码):


祝你好运

可能dict就是您想要的:

节点的一个示例是:

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

也许这里有一些帮助:你能给出一个更详细的逻辑如何工作的例子吗?这是我想要的,但我真的很想自己学习如何实现决策树。我问过一些程序员同事,他们建议使用类。然而,我仍然有点忘记了如何实现“类节点:”以获得我想要的结果。一个很好的开始是下载scikit学习源代码,看看它们如何实现决策树——这是我以前用Numpy和矩阵乘法做过的事情。您可能不会像scikit学习的那样编写速度快或优化的代码,但您会理解它是如何实现的。
{'sex': {'yes': 'send email', 'no': 'not send email'}}