C++决策树存储

标签 c++ decision-tree

我有一个决策树。 我为这个决策树提供了一些输入值。 然后决策树返回一个值。

输入值可以是“子女人数”、“年龄”等。 然后,决策树可以返回(例如)某个值,该值表示家庭拥有多少辆汽车或类似信息。

此决策树(如果转换为 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/

相关文章:

decision-tree - shap.force_plot() 引发异常 : In v0. 20 force_plot 现在需要基值作为第一个参数

PHP 决策树实现(ID3 或 C4.5)

python - 如何从 Skit-learn DecisionTreeClassifier 获取二叉树数组

c++ - 使用特定命名空间名称时 Arduino 链接器错误

c++ - pthread_mutex 锁是否比用户在代码中强加的内存屏障提供更高的性能

c++ - MFC对话框列表控件的工具提示

python - 具有数值的 ID3 决策树

java - 在 Java 中制作决策树的最佳学习算法?

c++ - OpenCV 的面部检测器参数 cv_haar_scale_image

c++ - 使用按位运算符仅查找数组中存在一次的数字