Gradient Boosted Decision Tree详解
第二次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇的内容主要来自于《机器学习》和《机器学习技法》,以及自己的一些见解。
预备知识:
这一部分主要是谈一谈Adaboost的适用范围,以及Adaboost的更新中涉及到的基础数学公式和定理的推导。
Adaboost的适用范围
若 为样本 的实际标签值, 为样本 的预测标签值,则Adaboost的指数损失函数可以表示为,
其中, 符合加性模型,即
由此可见,Adaboost在未经修改的情况下只适用于二元分类问题。
Adaboost的更新
Adaboost的每轮迭代都会基于当前样本权值产生一个基学习器 ,和这个基学习器的权重 ,并基于这两个条件进行样本分布(权值)的更新,假设第t-1轮迭代产生了学习器 ,根据Adaboost中给出的指数损失函数,可以推得第t轮的基学习器 和权重 的选取要满足下面的式子
即,他们的选取要以最小化Adaboost的指数损失函数为目标。
推导过程
主要分为五部分:Gradient Boost、训练基学习器、选择基学习器的权值 、训练集样本的更新和Gradient Boosted Decision Tree。
Gradient Boost
由于未经修改的AdaBoost使用指数损失函数作为目标函数,且使用二元分类器作为其基学习器,导致其适用范围不是很广泛【1】,因此在Gradient
Boost中,决定采用任意的学习算法产生基学习器,并将损失函数变为适用于基学习器的“任意”损失函数。
同样,假设第t-1轮迭代产生了学习器
,则第t轮的基学习器
和权重
的选取要满足下面的式子
其中, 可以为平方损失函数、hinge损失函数等等,由此可见,Gradient Boost可以通过扩展误差的度量方式,来达到接收更多类型的基学习器的目的(e.g. regression/soft classification/etc),下面以回归(Regression)任务为例。
训练基学习器
由式(1)可知,如果先忽略权重 的影响(先假设 为一个常数,下面式(3)的推导中用到),基学习器 要满足
其中, ,可以得到
另外,由Taylor公式可知,当 很小时,其对 的影响可以由下式代替
即 与 梯度的乘积。由于误差损失函数 ,式(2)可近似等价于,
忽略掉常数项(constants)的影响后,上式等价于
若要使式(3)达到最小,最简单的办法是令
,其中,
,在
没有任何限制的情况下,
可以取到
。
但是,一般情况下,我们不希望
的数量级过大,因此在式(3)中加入
正则项
,得到下式
经过配方法后得到,
忽略常数项的影响,得到
由上式可以看输出,当 为一个向量,输入为 ,预测输出为 ,实际输出为 ,即数据集为 时,基学习器的选择要使上述平方误差达到最小,这与多变量回归问题十分相近,因此可以使用类似的算法(e.g. C&RT,etc)解决上述问题。需要注意的是,这里的实际输出是上一轮迭代产生的学习器在样本 上的预测输出 ,与样本实际输出值 的余数(residual)。
选择基学习器的权值
当基学习器 决定下来后,由式(1)可知,权值 要满足
即训练集为 ,其中 为一个变量时,权值 的选取要使上述平方误差最小化,这与单变量回归问题十分相似,因此可采用类似算法(e.g. SVR)解决上述问题。需要注意的是,这里的输入是基学习器 对样本 的预测输出值(大小为1X1,即一个变量),这里的实际输出与训练基学习器时一样。
训练集样本的更新
用于训练基学习器
的训练样本为
,这里的
即原始数据集的输入不需要做任何改动,而实际输出
会随着迭代次数的改变和集成学习器
的更新而更新。
用于选择权值
的训练样本为
,这里需要进行两个更新,其中,
在已经确定好基学习器
后就成为了一个变量,他随每一轮迭代产生的
的改变而更新,而实际输出
会随着迭代次数的改变和集成学习器
的更新而更新。
Gradient Boosted Decision Tree
伪代码如下图所示,
注:图中 , .
参考资料
【1】《机器学习》周志华
【2】《机器学习技法》林轩田