GBDT算法流程为:
2.1 :求之前分类器损失函数的负梯度作为本次弱分类器需要拟合的输出
2.2:对回归树的学习,一般选择CART TREE(分类回归树),对应的叶节点区域为w,CART TREE生成就用平方误差最小化
2.3:在叶结点区域上损失函数最小,求弱分类器权重
2.4:合成新的分类器
和adaboost区别是使用梯度来决定下一棵树的系数
参考:
https://www.jianshu.com/p/b0e147de75e6
GBDT(Gradient Boosting Decision Tree)梯度提升树
AdaBoost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的分类问题。而GBDT算法是模型为加法模型,学习算法为前向分步算法,基函数为CART树,损失函数为平方损失函数的回归问题
在针对基学习器的不足上,AdaBoost算法是通过提升错分数据点的权重来定位模型的不足,而梯度提升算法是通过算梯度来定位模型的不足。
GBDT的损失函数是平方损失时
则负梯度为:
残差为:
GBDT的思想就是在每次迭代中拟合残差来学习一个弱学习器。而残差的方向即为我们全局最优的方向。
GBDT回归树基本模板
输入:训练数据集
输出:回归树
损失函数:
1)初始化:
一般平方损失函数为节点的均值
2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,MM代表迭代次数,即生成弱学习器的个数
a.对样本
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N计算损失函数的负梯度在当前模型的值将它作为残差的估计
b.对
{
(
x
1
,
r
m
1
)
,
.
.
.
,
(
x
N
,
r
m
N
)
}
\{(x_1,r_{m1}),...,(x_N,r_{mN})\}
{(x1,rm1),...,(xN,rmN)}拟合一个回归树,得到第m棵树的叶节点区域
R
m
j
,
j
=
1
,
2
,
3...
,
J
R_{mj},j=1,2,3...,J
Rmj,j=1,2,3...,JJ表示每棵树的叶节点个数
c.对
j
=
1
,
2
,
.
.
.
,
J
j=1,2,...,J
j=1,2,...,J,利用线性搜索,估计叶节点区域的值,使损失函数最小化,计算:
d.更新
3.得到最终的回归树
GBDT分类算法描述
GBDT分类算法思想上和GBDT的回归算法没有什么区别,但是由于样本输出不是连续值,而是离散类别,导致我们无法直接从输出类别去拟合类别输出误差。
另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。
参考:
https://blog.csdn.net/qq_24519677/article/details/82020863
http://www.elecfans.com/d/926113.html