Boosting类算法简介
Boosting是一类可将弱学习器提升为强学习器的算法,这类算法的工作机制如下:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;重复进行这一操作,最终将各个基学习器得到的结果加权结合。常见的Boosting算法包括GBDT、XGBoost和LightGBM等。
XGBoost
XGBoost原理
XGBoost是由K个基模型组成的一个加法运算式,其基模型为CART回归树(二叉树)。训练完成得到K棵树,当预测一个样本的分数时,根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点对应一个分数,将每棵树对应的分数加起来就是该样本的预测值。
如下图例子,训练两棵决策树,小孩的预测分数就是两棵树中小孩所落到的结点的分数相加。爷爷的预测分数同理。
XGBoost的目标函数定义为:
其中
目标函数由两部分构成,第一部分用来衡量预测分数和真实分数的差距,第二部分为正则化项。正则化项同样包含两部分,T表示叶子结点的个数,w表示叶子节点的分数。超参数γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止树过于复杂而造成过拟合。
boosting 模型是前向加法,第t步的模型拟合上次预测的残差,即:
此时,目标函数可改写为:
以平方误差为例,将上式进行二阶泰勒展开得:
其中
目标函数第一项为常数,对优化不影响,可以直接去掉,此时,目标函数简化为:
我们知道,每个样本都最终会落到一个叶子结点中,所以可将替换为其落入的叶子节点的分数w,将树的正则化一并整理到式中得到: