博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GBDT
阅读量:2353 次
发布时间:2019-05-10

本文共 865 字,大约阅读时间需要 2 分钟。

GBDT的两个不同版本(重要)

残差版本把GBDT说成一个残差迭代树,认为每一棵回归树都在学习前N-1棵树的残差。

Gradient版本把GBDT说成一个梯度迭代树,使用梯度下降法求解,认为每一棵回归树在学习前N-1棵树的梯度下降值。

GBDT中的Tree是回归树,不是分类决策树

Gradient Boost的Gradient

而Gradient Boost与传统的Boost的区别是,每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的简历是为了使得之前模型的残差往梯度方向减少,与传统Boost对正确、错误的样本进行加权有着很大的区别。

我对Gradient版本的理解

Gradient版本不同之处在于它并不采用上棵树与y的差值 Δy Δ y 作为新训练样本值,而是采用损失函数的梯度 Loss ∇ L o s s ;但是在叶节点 Rjm R j m 的预测结果 γjm γ j m 生成上,却采用的是搜索的方法:

这里写图片描述
之所以可以这样,原因在于等价性:

Δy0Loss0 Δ y → 0 ⇔ ∇ L o s s → 0

我们从另一个方面来考虑:

所有的机器学习不外乎是

  • 提出Loss函数
  • 计算Loss最小化的参数

不过你在看GBDT 残差版本时候好像没有看到Loss函数吧。其实是有的:

这里写图片描述
From:
这也就是说,我们讨论的残差版本只是一种狭义GDBT广义GDBT的理论基础是建构于Loss函数优化之上。换句话说,只要符合Loss函数优化的方法,都是有效的。这就是Gradient版本成立的根本所在。

Gradient Boost与神经网络的区别

GB是在空间上不断进行参数累积(比如GBDT多棵决策树);神经网络是在时间上不断进行参数累积(多次训练的结果会调整各个连接权重和bias)

为什么Xgboost快于一般GB

因为Xgboost加大了奖励惩罚项,从而加速了收敛。

你可能感兴趣的文章
JavaScript 闭包 详解
查看>>
Oracle 基础知识 详解
查看>>
JVM 命令参数 详解
查看>>
Java 产生随机数 详解
查看>>
Linux 后台执行命令 详解
查看>>
SpringBoot @ConfigurationProperties参数绑定 详解
查看>>
Nginx+Lua 开发的 hello world 案例 详解
查看>>
OpenResty 基础知识 和 Linux部署 详解
查看>>
图的一些算法题
查看>>
图的一些算法题2
查看>>
git merge 之后文件被删除
查看>>
队列的一些算法题
查看>>
安卓ListView自定义Adapter
查看>>
安卓recycleview
查看>>
并查集算法题
查看>>
动态规划
查看>>
安卓虚拟机在 widget list中找不到自己的app
查看>>
makefile模板
查看>>
动态规划背包问题
查看>>
动态规划2
查看>>