xgboost - 树助推器和线性助推器有什么区别?

机器算法验证 机器学习 大车 助推
2022-03-01 08:32:03

我知道梯度增强树。极端梯度提升算法现在被广泛应用。树助推器(gbtree)和线性助推器(gblinear)之间究竟有什么区别?

我的理解是,考虑到模型的复杂性,助推器树会生长出一棵适合(分类的错误率,回归的平方和)的树。线性助推器有什么不同?

1个回答

我最近才开始使用梯度增强树,如果我错了,请纠正我。我发现这个 wiki 页面https://en.wikipedia.org/wiki/Gradient_boosting信息丰富。查看算法梯度树提升部分。

据我了解,梯度提升当然适用于大多数学习者。梯度提升将在迭代中(m) 训练一名新学习者hm上一次迭代的集成残差。

合奏Fm更新为 FmFm1+γmhm

在哪里Fm1是以前的合奏和γm是一个系数,使得,

γm=argminγi=1nL(yi,Fm1(xi)+γmhm(xi)).

特此将新学习器与旧集成按系数融合γm,这样新的集成解释了目标y最准确的(由损失函数度量定义L)

正如 wiki 页面上所解释的,弗里德曼在对决策树的特殊修改中提出,其中每个终端节点j*** 新学员hm, 有自己独立的γjm价值。这种修改不能转移到大多数其他学习器,例如 gblinear。

*** (维基文章描述了每个γjm覆盖特征空间的不相交区域(R)。我更喜欢将其视为终端节点,恰好覆盖每个不相交的区域)

还要提一下,如果您选择严格的加性线性回归作为基础学习器,我认为该模型将无法拟合交互和非线性。在下面的示例中,xgboost 不适合y=x1x2

library(xgboost)
X = replicate(2,rnorm(5000))
y = apply(X,1,prod)
test = sample(5000,2000)
Data = cbind(X=X)
xbm = xgboost(Data[-test,],label=y[-test],params=list(booster="gblinear"),nrounds=500)
ytest = predict(xbm,Data[test,])
plot(y[test],ytest)