我有一个决策树。 我为这个决策树提供了一些输入值。 然后决策树返回一个值。
输入值可以是“子女人数”、“年龄”等。 然后,决策树可以返回(例如)某个值,该值表示家庭拥有多少辆汽车或类似信息。
此决策树(如果转换为 if-then 语句)将如下所示:
int i=0;
if (ownedHouses==0)
{
if (numberOfChildren==4)
{
if (ageFather==39)
{
if (incomeFamily==40000)
{
if (carsAlreadyCrashed==1)
{
i=3;
}
else
{
if (carsAlreadyCrashed==2)
{
if (insurancePaysForCrashes==1)
{
i=5;
}
}
else
{
i=4;
}
}
else
{
i=11;
}
}
}
else
{
i=2;
}
}
else
{
i=9;
}
}
else
{
i=22;
}
else
{
i=8;
}
这只是一个例子。实际上,生成的 if-then 语句绝对是巨大的。虽然我可以解析数据并从中创建这样的 if-then,但我无法在我的软件中使用这么大的 if-then 循环。
因此,我正在寻找一种不同的方式将决策树集成到我的软件中。
我见过在运行时解析决策树数据(以任何形式提供...)的方法,然后从中创建具有根、节点和叶子的类。
就我的目的而言,这还不够快。
还有人有其他想法吗?
谢谢你的帮助。
编辑:我已将一些值更改为现实生活中的值,以使含义更清楚。
最佳答案
我知道最快的实现是在 ALGLIB 中实现的. 决策树存储为 double 组。
- 叶节点 - 两个值 {-1, data}。
- 非叶节点 - 三个值 {input_value_index, threshold, right_branch_offset}。
您可以在 dforest.dfprocessinternal
中找到此方法的实现
关于C++决策树存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730236/