gpt4 book ai didi

r - 了解 R gbm 包中的树结构

转载 作者:行者123 更新时间:2023-12-04 18:05:00 27 4
gpt4 key购买 nike

我在理解 R 的 gbm 梯度提升机器包中树的结构时遇到了一些困难。具体来说,查看 pretty.gbm.tree 的输出 SplitVar中的索引有哪些特征指向 ?

我在一个数据集上训练了一个 GBM,这是我的一棵树的顶部~四分之一——调用 pretty.gbm.tree 的结果:

   SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight   Prediction
0 9 6.250000e+01 1 2 21 0.6634681 5981 0.005000061
1 -1 1.895699e-12 -1 -1 -1 0.0000000 3013 0.018956988
2 31 4.462500e+02 3 4 20 1.0083722 2968 -0.009168477
3 -1 1.388483e-22 -1 -1 -1 0.0000000 1430 0.013884830
4 38 5.500000e+00 5 18 19 1.5748155 1538 -0.030602956
5 24 7.530000e+03 6 13 17 2.8329899 361 -0.078738904
6 41 2.750000e+01 7 11 12 2.2499063 334 -0.064752766
7 28 -3.155000e+02 8 9 10 1.5516610 57 -0.243675567
8 -1 -3.379312e-11 -1 -1 -1 0.0000000 45 -0.337931219
9 -1 1.922333e-10 -1 -1 -1 0.0000000 12 0.109783128
```

在我看来,从 LeftNode, RightNode 的方式来看,索引是基于 0 的。 , 和 MissingNode指向不同的行。当通过使用数据样本进行测试并沿着树向下进行预测时,当我考虑 SplitVar 时,我得到了正确的答案。正在使用 基于 1 的索引 .

然而,我 build 的许多树中有 1 棵在 SplitVar 中有一个零。柱子!这是这棵树:
SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight    Prediction
0 4 1.462500e+02 1 2 21 0.41887 5981 0.0021651262
1 -1 4.117688e-22 -1 -1 -1 0.00000 512 0.0411768781
2 4 1.472500e+02 3 4 20 1.05222 5469 -0.0014870985
3 -1 -2.062798e-11 -1 -1 -1 0.00000 23 -0.2062797579
4 0 4.750000e+00 5 6 19 0.65424 5446 -0.0006222011
5 -1 3.564879e-23 -1 -1 -1 0.00000 4897 0.0035648788
6 28 -3.195000e+02 7 11 18 1.39452 549 -0.0379703437

查看 gbm 树使用的索引的正确方法是什么?

最佳答案

使用 pretty.gbm.tree 时打印的第一列是 row.names在脚本中分配的 pretty.gbm.tree.R .在脚本中,row.names被分配为 row.names(temp) <- 0:(nrow(temp)-1)哪里temp是存储在data.frame中的树信息形式。正确解读row.names是将其读作 node_id根节点被分配了一个 0 值。

在你的例子中:
Id SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction
0 9 6.250000e+01 1 2 21 0.6634681 5981 0.005000061

表示根节点(以行号0表示)被第9个 split 变量 split (这里 split 变量的编号从0开始,所以 split 变量是训练集x中的第10列) . SplitCodePred6.25表示所有小于 6.25 的点去了LeftNode 1以及所有大于 6.25 的点去了RightNode 2 .在此列中具有缺失值的所有点都分配给 MissingNode 21 . ErrorReduction0.6634由于这种 split ,根节点中有 5981 ( Weight )。 Prediction0.005表示在分割点之前分配给此节点上所有值的值。对于由 -1 表示的终端节点(或叶子)的情况在 SplitVar , LeftNode , RightNode , 和 MissingNode , Prediction表示为属于该叶节点的所有点预测的值调整(倍)乘以 shrinkage .

要理解树结构,重要的是要注意树的 split 是以深度优先的方式发生的。因此,当根节点(节点 id 为 0)被拆分为它的左节点和右节点时,左侧会被处理,直到在返回和标记右节点之前不可能进一步拆分。在您示例中的两棵树中,RightNode得到值 2。这是因为在这两种情况下,LeftNode原来是一个叶节点。

关于r - 了解 R gbm 包中的树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com