gpt4 book ai didi

r - xgboost 质量是如何计算的?

转载 作者:行者123 更新时间:2023-12-04 01:05:25 32 4
gpt4 key购买 nike

谁能解释一下Quality xgboost R 包中的列在 xgb.model.dt.tree 中计算功能?
在文档中它说 Quality “是与此特定节点中的 split 相关的增益”。
当你运行以下代码时,在 xgboost 文档中给出了这个函数,Quality树 0 的节点 0 为 4000.53,但我计算了 Gain作为 2002.848

data(agaricus.train, package='xgboost')

train <- agarics.train

X = train$data
y = train$label

bst <- xgboost(data = train$data, label = train$label, max.depth = 2,
eta = 1, nthread = 2, nround = 2,objective = "binary:logistic")

xgb.model.dt.tree(agaricus.train$data@Dimnames[[2]], model = bst)

p = rep(0.5,nrow(X))

L = which(X[,'odor=none']==0)
R = which(X[,'odor=none']==1)

pL = p[L]
pR = p[R]

yL = y[L]
yR = y[R]

GL = sum(pL-yL)
GR = sum(pR-yR)
G = sum(p-y)

HL = sum(pL*(1-pL))
HR = sum(pR*(1-pR))
H = sum(p*(1-p))

gain = 0.5 * (GL^2/HL+GR^2/HR-G^2/H)

gain
我明白 Gain由以下公式给出:
gain formula
由于我们使用对数损失,G 是 p-y 的总和H 是 p(1-p) 的总和- 在这种情况下,gamma 和 lambda 都为零。
谁能确定我哪里出错了?

最佳答案

好的,我想我已经解决了。 reg_lambda 的值默认情况下不是文档中给出的 0,但实际上是 1(来自 param.h)

enter image description here

此外,在计算增益时似乎没有应用一半的因子,因此质量列是您期望的两倍。最后,我也不认为gamma (也称为 min_split_loss )应用于此计算(来自 update_hitmaker-inl.hpp)

enter image description here

相反,gamma 用于确定是否调用修剪,但并未反射(reflect)在增益计算本身中,如文档所示。

enter image description here

如果您应用这些更改,您确实会得到 4000.53 作为 Quality对于树 0 的节点 0,如原始问题所示。我会向 xgboost 人员提出这个问题,因此可以相应地更改文档。

关于r - xgboost 质量是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654479/

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