将决策树写入并加载到文件C ++

时间:2016-12-14 15:49:08

标签: c++ decision-tree

我有一个以下列方式定义的决策树节点类:

class dt_node
{
public:    
    dt_node* child[2]; //two child nodes
    int feature;
    double value; // feature and value this node splits on
    bool leaf;
    double pred; // what this node predicts if leaf node
}

有没有办法可以将其写入文件并根据需要从文件中重建树?

3 个答案:

答案 0 :(得分:1)

无论如何你都可以做到......

真正的答案:这只取决于你。如果我是你,并且必须将这种对象保存在.txt文件中,我只会用一些方法来保存这个结构,例如0*0*0.0*0*0.0。第一个0表示子节点数,第二个0表示feature值,依此类推,而*字符是值之间的分隔符。空格可以更好地工作,但我不喜欢它们作为我的文件中的分隔符...文本文件将在每个分离的对象之间具有一些其他字符(例如,|)。示例看起来像3*22*31.11*1*1.0|2*2*1.0*0*33.3

显然,我可能会误解你的问题。如果你问有没有保存这个特定代码并通过在没有dt_node类的程序中打开文件来执行它的方法,不幸的是,我觉得我的知识还不足以回答。

希望无论如何都有帮助。

答案 1 :(得分:1)

如果您想自己编写格式,我只需要在文件中写入其他每个节点的参数(两个double,bool和一个int)以及从根节点开始的级别,然后通过树重复进行。正如我所看到的,你在其中的bool控制节点是否有子节点,这将有助于阅读文件过程。

文件读取将比文件写入复杂一点。对于您读取的每个节点,再次循环读取下一个节点,直到任何节点的级别等于或小于当前节点的级别。这听起来很复杂,但事实并非如此。

当然你不应该把注意*指针写到文件中,因为它们包含无用的信息,因为在读取文件时你将不得不重新创建完整的树。

答案 2 :(得分:1)

为项目添加提升可能有点痛苦,但是那里有相当多的库包括数学和图形,所以它可能值得付出努力。

Boost序列化文档为here,其中包含教程here

序列化库允许您甚至只为您的类添加一个函数,然后定义如何保存和加载该类的状态。然后,如何通过boost库完成实际保存数据,例如,您可以使用二进制文件,xml和amp;文本。

您唯一需要注意的是二进制序列化不是机器可转移的。