机器学习日常17:Bagging,Boosting(包括Adaboost,gradient boosting)简单小结
集成学习通过构建并结合多个学习器来完成学习任务。通俗来讲就是用多个分类器或者线性模型来结合成一个黑盒子,这个黑盒子要比单一学习器有更显著优越的性能(比如精度,泛化性能)。
在这里引用西瓜书中的描述:
根据个体学习器的生成方式,目前集成学习方法大致分成两大类,1,个体学习器间存在强依赖关系,必须用串行生成的序列化方法,这里指用Boosting 2,个体学习器间不存在强依赖关系,可同时生成的并行化方法,这里指Bagging,或者random forest。
Bagging实际上基于自助采样法,也就是有放回的随机采样,使抽取的样本数目同原来的样本数目一样。比如有m个样本,我们随机有放回采样,采集出 T个含m个样本的采样集。然后基于这 T个采样集,每个采样集学习出一个学习器,然后将这 T个学习器结合。就构成了我们的Bagging。预测输出时,可以采用简单投票法(对于分类任务)或者简单平均法(对于回归任务)。
关于Bagging,训练集中大约有63.2%的样本出现在采样集中,所以那剩下的部分,可以进行“包外估计”。另外,Bagging主要关注降低模型方差。
Random forest(随机森林)算是Bagging上的扩展变体。在Bagging中,我们把基学习器定义成决策树,另外在决策树的训练过程中引入随机属性选择(这里是随机选择一部分属性(特征),随机选择一部分样本)。就变成了random forest。
随机森林简单易于实现,随着学习器数目的增加,能收敛到更低的泛化误差。
Boosting的工作机制如下:
首先从初始训练集训练处一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复,至学习器数目到达指定T,最终将T个基学习器进行加权结合。
以下伪代码及例子摘自知乎上某大神回答:
链接:https://www.zhihu.com/question/54332085/answer/296456299
对于Adaboost:
1,初始化训练数据的权值分布
D1= (w11, ..., w1i, ..., w1N),其中w1i= 1/N,i=1, 2, ..., N
2,对m=1, 2,..., M
a,使用具有权值分布Dm的训练数据集学习,得到基本分类器
Gm(x): X -> {-1, +1}
b,计算Gm(x)在训练数据集上的分类误差率
c,计算Gm(x)的系数
这里的对数是自然对数。
d,更新训练数据集的权值分布
这里,Zm是规范化因子
它使Dm+1成为一个概率分布。
3,得到最终分类器
上面是具体算法,下面是例子分析(来自《统计学习方法》--李航)
对于Gradient Boost
Gradient Boosting是一种实现Boosting的方法,它的主要思想是,每一次建立模型,是在之前建立模型损失函数的梯度下降方向。损失函数描述的是模型的不靠谱程度,损失函数越大,说明模型越容易出错。如果我们的模型能够让损失函数持续的下降,说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度的方向下降。
这里损失函数可以是logistics,huber,甚至是L2损失。
其伪代码如下所示: