我有一个以下列方式定义的决策树节点类:
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
}
有没有办法可以将其写入文件并根据需要从文件中重建树?
答案 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)