Bagging算法

集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。

Bagging算法(英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1996年提出。Bagging算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。

1.什么是Bagging??

Bagging原理图如下


分别构造多个弱学习器,多个弱学习器相互之间是并行的关系,可以同时训练,最终将多个弱学习器结合。

特点在于随机采样,那么什么是随机采样(自组采样)呢?
随机采样(bootstrap sample)从n个数据点中有放回重复随机抽取一个样本(即同一个样本可被多次抽取),共抽取n次。创建一个与原数据大小相同得数据集,但有些数据点会缺失(大约1/3),有些会重复。

举例说明:
原数据集:[‘a’, ‘b’, ‘c’, ‘d’]
随机采样1:[‘c’, ‘d’, ‘c’, ‘a’]
随机采样2:[‘d’, ‘d’, ‘a’, ‘b’]

对于缺失得数据点我们常常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

注:GBDT的子采样是无放回采样,而Bagging的子采样是放回采样。

bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。

bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。

2. bagging算法流程
    上一节我们对bagging算法的原理做了总结,这里就对bagging算法的流程做一个总结。相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的多。

输入为样本集D={(x,y1),(x2,y2),…(xm,ym)},弱学习器算法, 弱分类器迭代次数T。

输出为最终的强分类器f(x)
    1)对于t=1,2…,T:

a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dt
      b)用采样集Dt训练第t个弱学习器Gt(x)
    2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

3.总结
先谈谈什么是偏差和方差?
偏差:模型预测值的期望与真实值之间的差异,反应的是模型的拟合能力。
方差:反应的是训练集的变化所导致的学习性能的变化,即刻画了数据扰动所造成的影响,模型过拟合时会出现较大的方差。
而Bagging是对多个弱学习器求平均,这样能减少模型的方差,从而提高模型稳定性。

由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。Bagging适合对偏差低、方差高的模型进行融合。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。

Bagging + 决策树 = 随机森林

参考:
参考
python机器学习基础教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章