在集成学习里面,有两种流派,一个是 boosting 流派,它的特点是对于各个学习器之间有着相互依赖的关系 (比如说在某一次算法结束后,分类错误的样本会增大比例,以引起下一次的训练时候的关注度),另一种是bagging 流派,它的特点是各个学习器之间没有任何的依赖关系,可以并行拟合。
Bagging 原理
从图中,我们可以看出, bagging 学习算法 没有 adaboost 算法那样的联系,它的关键之处在于“随机取样“。
什么是随机取样呢 ?
就是我们固定从训练集中采集固定个数的样本,但是这种采集是一种有放回的采集,对于每一次采集,我们都将这一次采集到的样本放回,也就是说我们可能采集到重复的样本,对于这个算法我们一般会随机采集与样本训练样本数目相同的样本,这样得到的采样集和训练集合样本数目相同,但是内容不同,对于数据集m个样本的进行T次随机采样,得到训练T个训练器的训练集。 注意 (Bagging 是有放回随机采样)
有概率论知识可以得到,每一次采样每一个样本被采集到的概率为 1 / m,不被采集到的概率为 1 - 1 / m 则 m 次都没有被采集到的概率为 1/e = 36.8。我们称之为袋外数据用来当做测试集,来检验模型的泛化能力。
与 Adaboost 算法一样 一般Bagging算法的基础学习器是神经网络或者决策树。
对于这个算法如果是预测离散值则采用投票法,对于连续值则采用求平均的方法。
Bagging 算法流程
相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的