机器学习笔记(1)从boost到xgboost
A. ensemble method
将几个模型(可能是分类器)通过某种方式组合在一起,共同完成任务。通常可分为两大类:
1. Averaging method
例如 Bagging, RF。其主要工作在于数据的采样方式,比如是否随机采样,是否有放回等等。子分类器通常为能力较强的模型。最终结果常常取子分类器的算术平均。
2. boosting method
可以使用“弱”分类器,依次,逐个对子模型进行训练,当前第m个模型会用到m-1时刻的结果。重点处理错误分类的数据样本,例如提高错误样本的权值,在“组合”阶段,使用加权平均的方式推理最终结果,能力强的模型权重大。
B.1 Adaboost (adaptive boost)
Adaboost是boosting方法的一种方案,但还不是具体方法(没有指定具体的子分类器)。
首先是其具体算法:
start:
1. 初始化权重
2. 对 m=1-->M有:
- 计算误差:
- 由目标函数(本文暂不作讨论,其实很重要)求
- 更新权重:
, where Normalization factor
3. 最终分类器为:
end
B.2 Adaboost一个例子[1]
[1]: https://blog.****.net/liyuan123zhouhui/article/details/51720472
C. gradient boost
梯度提升很巧妙的借用了梯度下降法的思路
1. 最终分类器模型与B.1里差不多:
这里g(*)是子模型
2. 目标函数为:
为了使其最小化,有
3. 计算太复杂,由于是前项分步加法模型,我们每一步只对一个基函数求解,逐步逼近
从梯度下降法的角度思考m时刻需要做的事,我们希望:
对比上两式,可以发现
--------------------------------------------------------------------------------------------------------------
D. xgboost (extreme gradient boosting)[2]
强烈推荐看[2]原文
[2] http://www.52cs.org/?p=429
这里用到了Taylor expansion的前三项:
1. 还是先抬出目标函数:为了跟上面notation对应,我稍微改一下[2]中的notation
其中是正则项, 定义在后面会提到。
2. 目标函数使用Taylor expansion:
其中
中,
项为常数项,与C合并,由于是优化目标函数,C不影响,故不写出来了
3. 通过一个例子说明接下来的变换
如上图,设q为树的结构,即输入x到输出类型(叶子节点的索引)的映射关系,上图q=1,2,3。叶子节点上的权重为w,
即有:
假设有N=5个样本,分别落在了1,2,3号叶子节点上,顺序依次为(1,1,2,3,3)
则有:
暂时不讨论正则项,
如上式,我们发现,目标函数可以重写成 以叶子节点为迭代器 的形式(之前是用样本i=1:N来迭代)
即:
, T是叶子节点的个数
对于正则项,
,
是两个超参数。
因此,合并一下就有:
where, ,
于是,,
-----------------------------------------------------------------------------------------------------------------
以上就是xgboost的原理推导,对于具体问题,不可能列举所有可能的树再进行打分,计算出最优模型,
因此作者提出一种贪心策略,对叶子节点进行再次分割时,引入增益函数:(与[2]一致,只是notation换了一下)
其中,
指的是分割后
左边的部分,比如该叶子节点 j 所代表的类有:
(当然也可以是一个连续区间比如[1,5]), 分割条件是
,
即将其分为两部分:,
那么:
同理其他的参数。
增益函数中,从左至右分别叫做:左子树分数,右子树分数,不分割时的分数,惩罚项(正则)
可以发现新添加分割不一定会使情况变好,正则项相当于“剪枝”。