c++决策树存储

C++ decision tree storage

本文关键字:存储 决策树 c++      更新时间:2023-10-16

我有一个决策树。我给这个决策树一些输入值。然后决策树返回一个值。

输入值可以是"子女数"、"年龄"等。然后,决策树可以返回(例如)一个特定的值,该值表示该家庭拥有多少辆汽车或诸如此类的东西。

这个决策树(如果转换成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中实现的。决策树存储为双精度数组。

  • 叶节点-两个值{-1,data}。
  • 非叶节点-三个值{input_value_index, threshold, right_branch_offset}.

您可以在dforest.dfprocessinternal

中找到此方法的实现。