04-06 梯度提升树
梯度提升树
梯度提升树(gradien boosting decision tree,GBDT)在工业上用途广泛,属于最流行、最实用的算法之一,梯度提升树可以看成是提升树的优化版。
梯度提升树学习目标
- 梯度提升树和提升树
- 回归梯度提升树流程
- 梯度提升树优缺点
梯度提升树详解
梯度提升树和提升树
梯度提升树其实流程和提升树差不多,但是在损失函数拟合方面,提升树损失函数拟合用的是平方损失,而梯度提升树则是使用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个回归树。
第\(t\)轮第\(i\)样本的损失函数的负梯度表示为
\[r_{ti}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{t-1}(x)}
\]
利用\((x_i,r_{ti}),\quad(i=1,2,\cdots,m)\),我们可以拟合一颗CART回归树,得到了第\(t\)棵回归树,它对应的叶节点区域为\(R_{tj},\quad(j=1,2,\cdots,J)\),其中\(J\)为叶子节点数。
回归梯度提升树流程
输入
有\(m\)个数据\(n\)个特征的训练数据集\(T=\{(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\),损失函数为\(L(y,f(x))\)。
输出
回归树\(\hat{f(x)}\)。
流程
- 初始化
\[f_0(x) = \underbrace{arg\,min}_c\sum_{i=1}^mL(y_i,c)
\]
- 对\(i=1,2,\cdots,m\)
- 对\(i=1,2,\cdots,m\),计算
\[r_{mi}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{m-1}(x)} \]- 对\(r_{mi}\)拟合一个回归树,得到第\(m\)棵树的叶节点区域\(R_{mi},\quad{j=1,2,\cdots,J}\)
- 对\(j=1,2,\cdots,J\),计算
\[c_{mj} = \underbrace{arg\,min}_c\sum_{x_i\in{R_{mj}}}L(y_i,f_{m-1}(x_i)+c) \]- 更新
\[f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}}) \] - 得到回归树
\[\hat{f(x)}=f_M(x)=\sum_{i=1}^M\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}})
\]
梯度提升树优缺点
优点
- 相比较SVM,较少的调参时间即可得到一个准确率还不错的模型
- 相比较提升树,利用了损失函数的负梯度在当前模型的值作为提升树算法中残差值的近似值,即对于回归和分类问题找到了一种通用的拟合损失误差的方法
缺点
- 由于弱学习器之间存在依赖,无法支持并行
小结
梯度提升树虽然在某种程度解决了提升树对于分类和回归问题使用不同的损失函数的问题,并且使用损失函数的负梯度作为提升树算法残差值的近似值,提升了模型的准确度,但是他还无法做到并行。下面介绍的XgBoost作为GBDT的升级版,将会解决这个问题。