以下关于GBM和GBDT的理解来自经典论文[greedy function approximation: a gradient boosting machine],by Jerome H.Friedman,(https://github.com/LouisScorpio/datamining/tree/master/papers)
论文的整体思路:
1.函数空间的数值优化
对算法中损失函数的数值优化不是在参数空间,而是在函数空间,数值优化方式为梯度下降;
2.GBM
以加法模型为基础,使用上述优化方法,构建一套通用梯度提升算法GBM;
3.不同损失类型的GBM
具体展现使用不同类型的损失时的GBM;
4.GBDT
以CART回归树为加法模型的弱分类器,构建算法模型即GBDT。
函数空间的数值优化
首先,考虑加法模型,即最终分类器是由多个弱分类器线性相加的结果,表示为以下形式:
(1)
其中,h(x;a)是弱分类器,是关于输入特征x的函数,a是函数的参数(如果h(x;a)为回归树,那么a就是回归树中用于分裂的特征、特征的分裂点以及树的叶子节点的分数),M是弱分类器的数量,为弱分类器的权重(在GBDT中相当于learning_rate,即起到shrinkage的作用)。
参数空间的数值优化
假设预测的目标函数为F(x; P),其中P为参数,损失为L,那么损失函数表示为:
对应参数P的最优解表示为:
考虑使用梯度下降的优化方式,首先计算损失函数对参数P的梯度:
然后,对参数P沿着负梯度方向即-方向更新,更新的步长为:
其中是在负梯度方向上更新参数的最优步长,通过以下方式线性搜索得到:
从初始值开始,经过多次这样的更新迭代之后,参数P的值最终为:
以上为参数空间的数值优化。
函数空间的数值优化
在函数空间,假设预测的目标函数为F(x),损失为L,那么损失函数表示为:
注意,这里损失函数的参数不再是P,而是函数。
按照梯度下降的优化方式,这里要计算损失函数对函数F的梯度:
然后对函数沿着负梯度方向更新,更新的步长如下:
其中是在负梯度方向上更新参数的最优步长,通过以下方式线性搜索得到:
经过多次迭代之后,最终的函数结果为:
GBM
考虑(1)中的加法模型形式,可以得到
假设损失为L,那么
根据函数空间的数值优化,应该对应于负梯度:
在模型训练时,负梯度是基于样本点进行的估计,为了提高泛化能力,一种可行的解决办法是让去拟合负梯度,由此得到:
拟合学习到的作为加法模型的弱学习器。加法模型的步长通过线性搜索的方式得到:
综上,GBM整个算法流程如下:
- 初始化:
- For m = 1 to M do:
3.- endFor
end Algorithm
- endFor
网友评论