集成学习通过构建并结合多个学习器来提高泛化性能。思想就是三个臭皮匠,顶个诸葛亮。例如在分类中, 将多个弱分类器通过某种方式结合起来,得到比弱分类器的效果更好的效果。
bagging有放回随机抽样是为了保证多样性,每棵树要多少有点差异。boosting经典的是基于残差的,那就要求每棵树针对一样的数据集。
集成学习分类
- 按照目标分类
- stacking:增强分类效果
- bagging:降低方差
- boosting:降低偏差
- 按生成方式分类
- 串行:即当前分类器依赖前一个分类器,必须前一个训练完毕才能训练。典型代表是adaboost
- 并行:多个不同的分类器之间没有关系,可以同时训练,然后再结合到一起。典型的代表是随机森林
stacking
stacking其实很简单,直接将多个分类器结果合并到一起,训练一层线性分类器得到最终的结果。
- 使用所有数据训练了K个模型
- 将测试数据输入K个模型,得到K个预测分布
- 将K个分布cat到一起,然后经过一层线性分类器得到最终结果
bagging
bagging通过多次有放回采样对数据进行采样,得到T个子集,然后分别使用T个模型对子集进行训练。
- 使用bootstrap采样对数据采样出T个子集
- 基于子集训练T个模型
- 将每个模型结合起来,对于回归任务使用简单平均的方式,对于分类任务,使用多数表决的方式。
- bagging为什么会降低方差(variable),提高模型的稳定性?
当我们采用出的T个子集时,每个子集的均值与方差与整体数据相等。但是使用bagging后,例如在回归任务中,会对T个模型的结果相加并取均值,即数据的方差比整体方差的小。 - boostrap如何采样
有放回的采样方式,即取出后放回到原来数据集中。其还有一个优点是
每个子集大约使用了63.2%的数据,所以剩余36.8%的数据可以当作验证集。
63.2%的来历:每个样本被选中的概率为,所以采样d次依然没有被使用的概率为,当n特别大时,趋近于,约等于36.8,所以采样的子集约使用了63.8的数据。
boosting
boosting典型代表是AdaBoost算法,特点是通过迭代每次学习一个基本分类器。每次迭代中,提高那些被前一轮分类器错误分类数据的权值,而降低那些被正确分类的数据的权值。最后,AdaBoost将基本分类器的线性组合作为强分类器,其中给分类误差率小的基本分类器以大的权值,给分类误差率大的基本分类器以小的权值。
具体推导请看《统计学习方法》第二版第八章
- boosting如何降低偏差(bias)?
boosting是在前一个模型的基础上,给识别错误的样本更大权重, 让下一个模型更加关注识别错误的样本,所以每次迭代都会降低偏差。
参考文献
- 机器学习 周志华
- https://zhuanlan.zhihu.com/p/41809927
- 统计学习方法
网友评论