- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在理解 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 的索引 .
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
最佳答案
使用 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列) . SplitCodePred
的 6.25
表示所有小于 6.25
的点去了LeftNode 1
以及所有大于 6.25
的点去了RightNode 2
.在此列中具有缺失值的所有点都分配给 MissingNode 21
. ErrorReduction
是 0.6634
由于这种 split ,根节点中有 5981 ( Weight
)。 Prediction
的 0.005
表示在分割点之前分配给此节点上所有值的值。对于由 -1
表示的终端节点(或叶子)的情况在 SplitVar
, LeftNode
, RightNode
, 和 MissingNode
, Prediction
表示为属于该叶节点的所有点预测的值调整(倍)乘以 shrinkage
.
要理解树结构,重要的是要注意树的 split 是以深度优先的方式发生的。因此,当根节点(节点 id 为 0)被拆分为它的左节点和右节点时,左侧会被处理,直到在返回和标记右节点之前不可能进一步拆分。在您示例中的两棵树中,RightNode
得到值 2。这是因为在这两种情况下,LeftNode
原来是一个叶节点。
关于r - 了解 R gbm 包中的树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296541/
背景 gbm 包 的引用手册指出,interact.gbm 函数计算 Friedman 的 H 统计量以评估变量相互作用的强度。 H 统计量的范围为 [0-1]。 dismo 包的引用手册没有引用任何
修改梯度提升,我注意到 R 的 gbm 包在一个最小的示例中产生与 h2o 不同的结果。为什么? 数据 library(gbm) library(h2o) h2o.init() train <- da
有没有办法将 gbm 模型导出到 C++。具体来说,我如何调用 predict.gbm 函数在 R 之外运行以便对新数据集进行评分。 我已将模型导出为 PMML 文件,但我不确定新数据集将如何基于 P
我正在尝试运行 GradientBoostingClassifier()在 gridsearchcv 的帮助下。 对于每个参数组合,我还需要表格格式的“精确度”、“召回率”和准确性。 这是代码: sc
我希望使用 GBM包进行逻辑回归,但它给出的答案略超出 0-1 范围。我已经尝试了 0-1 预测的建议分布参数( bernoulli 和 adaboost ),但这实际上比使用 gaussian 更糟
我遇到了一个奇怪的问题。我已在笔记本电脑上成功运行此代码,但是当我尝试首先在另一台计算机上运行它时,我收到此警告未指定分布,假设伯努利...,这是我所期望的,但随后出现此错误:object$var.l
我正在尝试使用 R 中的 gbm.more 函数。为了清楚起见,我使用了规范的虹膜数据。当我指定 distribution="multinomial"时,下面的代码不起作用,但是当我指定 distri
我使用了gbm函数来实现梯度提升。我想进行分类。之后,我使用 varImp() 函数在梯度提升建模中打印变量重要性。但是......只有 4 个变量具有非零重要性。我的大数据里有371个变量....对
类似的问题是 asked但是答案中的链接指向随机森林示例,在我的情况下似乎不起作用。 这是我正在尝试做的一个例子: gbmGrid <- expand.grid(interaction.depth
为分类问题运行 gbm 函数时。我收到以下错误: Error in res[flag, ] 0.5,1,0) table(pred,df$Group) pred 0 1 0 98
我使用 R 包 GBM 作为预测建模的首选。这个算法有很多很棒的东西,但一个“坏”是我不能轻易地使用模型代码来对 R 之外的新数据进行评分。我想编写可以在 SAS 或其他系统中使用的代码(我将从SAS
我正在解决一个多类分类问题并尝试使用广义提升模型(R 中的 gbm 包)。我面临的问题:插入符号 train功能与 method="gbm"似乎不能正确处理多类数据。下面给出一个简单的例子。 libr
我正在尝试使用 Friedman 和 Popescu 2008 https://projecteuclid.org/euclid.aoas/1223908046 中描述的方法确定 gbm 模型中的哪些
我有一个相当小的数据集(162,000 个观察值,13 个属性)我正在尝试使用 h2o.GBM 进行建模。响应变量是具有大量级别的分类变量(~ 20,000 个级别)该模型没有耗尽内存或给出任何错误,
是否可以绘制部分依赖图来显示类概率并估计预测变量对 GBM 的影响?模型?类似于 randomForest 包中的 partialPlot。 根据 this article ,部分情节可以用 gbm
我使用提前停止和设置 ntrees=10000 在水中训练了 GBM。我想检索模型中实际存在的树木数量。但是,如果我调用 model.params['ntrees'] (其中 model 是网格搜索中
我正在尝试使用 caret在 R 中打包用于具有用户定义的性能指标的多个嵌套交叉验证过程。我遇到了各种各样的问题,所以我回过头来看看是否有更多开箱即用的 caret 的问题。看来我遇到了一个。 如果我
在传统的GBM中,我们可以使用 Predict.gbm(模型, newsdata=..., n.tree=...) 这样我就可以将测试数据的结果与不同数量的树进行比较。 在h2o.gbm中,虽然有n.
我对 light gbm 使用了自定义指标,但提前停止了对数损失的工作,这是目标函数,我如何解决这个问题或更改提前停止以适用于评估指标。 def evaluate_macroF1_lgb(truth,
R gbm 中的 weights 参数是什么?功能?它是否实现了成本敏感随机梯度提升? 最佳答案 您可能已经阅读过本文,但文档说 weights 参数是这样定义的: an optional vecto
我是一名优秀的程序员,十分优秀!