博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2. 集成学习(Ensemble Learning)Bagging
阅读量:4970 次
发布时间:2019-06-12

本文共 1317 字,大约阅读时间需要 4 分钟。

1. 前言

前面从整体的角度介绍了集成学习算法,集成学习算法分为Bagging、Boosting、Stacking。Bagging的特点是各个弱学习器之间没有依赖关系,Boosting的特点是各个弱学习器之间有依赖关系,Stacking的特点是在多个学习器的基础上再加一个机器学习算法进行预测。

2. Bagging原理

Bagging的原理可以通过下图清楚的看到。

image

Bagging的原理是随机采样,就是在我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。所以之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有\(m\)个样本训练集做\(T\)次的随机采样,,则由于随机性,\(T\)个采样集各不相同。

这里还有一个有意思的地方,由于是随机采样,我们的所有样本中,有一些样本会一直没有采样到,这个样本的数量大约是所有样本的36.8%。我们称这部分数据为袋外数据(Out Of Bag,简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。有了OOB我们就不需要重新分离test集合,后面用OOB代替test集合进行验证。这样训练集的采样空间就是整个数据集,这样训练集的数据分布就更加接近真实的数据分布

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

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

3. Bagging算法流程

本节就对Bagging算法的流程做一个总结。相对于Boosting系列的Adaboost和GBDT,Bagging算法要简单的多。

输入为样本集\(D={(x_1,y_1),(x_2,y_2),...(x_m,y_m)}\),弱学习器算法, 弱分类器迭代次数T。

输出为最终的强分类器f(x)

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

4. 总结

本文详细的介绍了下Bagging的一些细节,Bagging的思想是比较简单的,但是里面蕴含这巨大的力量,用了Bagging的算法能够有效的减少过拟合的程度,因为弱学习器之间没有依赖关系,所以可以并行训练,大幅度提升训练速度。下文介绍Bagging的优秀算法随机森林(Random Forest)。

转载于:https://www.cnblogs.com/huangyc/p/9957216.html

你可能感兴趣的文章
Django(六)Session、CSRF、中间件
查看>>
【转】每天一个linux命令(11):nl命令
查看>>
第七周学习进度条
查看>>
抽象类与接口
查看>>
poj 1236 强联通分量
查看>>
C阅读与学习
查看>>
python运维之saltstack方式
查看>>
[转]关于Web前端开发,附:(百度web前端笔试面试题目)
查看>>
【转】WPF 从FlowDocument中找到Hyperlink
查看>>
python AES CBC模式加密
查看>>
Spring web flow的意义
查看>>
python面向对象编程基本规则
查看>>
Yii 2.x html 代码压缩
查看>>
文本编辑器激活系列(二):UltraEdit安装、激活、汉化教程
查看>>
安装redhat6.5虚拟机、做快照
查看>>
C#使用SqlServer
查看>>
分牛问题
查看>>
Ubuntu+IntelliJ IDEA+Android 配置NDK环境+openCV
查看>>
oozie bundle学习笔记
查看>>
会报编译器警告的Xcode 6.3新特性:Nullability Annotations
查看>>