与adaboost一样,GBDT也是采用前向分步算法,只是它会用决策树cart算法作为基学习器,因此先要从分类树和回归树讲起
决策树-提升树-梯度提升树
决策树cart算法
回归树:叶子结点的值是所有样本落在该叶子结点的平均值
如何构建:1.深度?2.划分结点如何选取3.叶子结点cm值
1的方法:深度/子结点包含样本数/精度
3的方法:取均值损失最小
2的方法:找到一个划分条件使得cm求和最小
采用的损失:平方损失
分类树:结点不止有特征,还有特征的属性
特征选择方式:选择gini值最小的特征作为划分标准
GBDT:梯度提升树,基分类器是决策树,且权重均为1
二分类问题的提升树:
是adaboost的特殊情况:基分类器为二类分类树,且权重为1,损失函数用指数损失函数
回归问题的提升树:让当前树拟合残差
GBDT:作用:考虑一般问题,解决不管损失函数是什么都能求解
方法:泰勒展开推导:由此得到步骤为:
1.计算当前损失函数的负梯度
2.将xi,yi带入损失函数,得到第m轮的训练数据集Tm={(x1,rm1),(x2,rm2)...}
3.让当前的基学习器拟合上述样本
如何用它解释回归问题的提升树?
L=1/2(Y-F(X))2,对fx求导得y-f(x)=rm残差
那么GBDT如何解决二分类问题?回归树能不能做二分类?
问题:无法直接输出类别或者概率预估
解决方案:通过sigmoid函数将加法模型映射到0-1的空间中,再用交叉熵损失进行学习
损失函数:
负梯度为Y-1/(1+e-fm(x))=Y-Ym-1
所以rmi=yi-ym-1,i来构造训练样本
损失函数决定了cm的取值,所以损失函数最好是能最大程度地拟合残差,最终我们得到的最优损失函数(用总体损失)和它对应的cm为
但这个cmj无法解出,通过二阶泰勒展开得到其解
但是,使用总体损失对回归树进行优化,计算过于复杂,而使用MSE划分得到的树的结构是一样的,因此实际步骤为:
1、用传统回归数构建好回归树的结构
2、用总体损失中的方式计算树的叶子节点中的cmj
为了避免过拟合,有时也加上一个学习率,让它不要学的太满
最后讲GBDT+LR:
那么如何用决策树构造新特征呢?
构建完所有叶子节点后,再送到逻辑回归中,进行CTR预估,注意这两步是独立的,因此不用将LR的梯度传回到GBDT
优点:自动做特征工程 缺点:容易过拟合