集成学习

Bagging


一个复杂的模型可能会导致:高方差,怎么办?

多找几个这样的模型,组合取平均,这样结果就会好很多

放回式抽样,这样可以获得几笔不同的数据集:DataSet->n*DataSet

使用这几笔数据训练不同的分类器
这里写图片描述
在测试集中,再使用上述几个分类器,投票(分类)/ 取平均(回归)
这里写图片描述

对Decision Tree使用Bagging------>Random Forest

但是,如果仅仅训练集resample是不够的

还要:决策树划分节点的时候,某些节点只能使用部分特征(限制某些feature不能用)

最后,Out-of-Bag Validation for bagging(oob袋外验证,即一直没用被采样到的数据,拿来作为交叉验证)

OOB
如下图,O表示使用,X表示未使用
这里写图片描述
我们可以使用f2和f3组合作为随机森林,然后使用x3作为测试集(f2和f3都没使用x3)
这里写图片描述


Boosting


  • Bagging是用在很复杂(很强,越复杂越强嘛)的模型上(老大妈考虑太周到了,想办法让她不要太关注细枝末节),主要是想降低Variance(方差),避免过拟合

  • Bagging主要技巧:打散数据集,有放回的采样

  • Boosting是用在很弱的模型上的(能力互补的菜鸡分工合作),主要是想降低Bias(偏差)

  • Boosting主要技巧:对不能正确分类的数据集重点关注,加大权重

大致流程:

获取第一个分类器f1
.
寻找能辅助(互补)f1的分类器f2 (跟f1差不多的话就不行。不过怎么找?)
.
反复上述
.
组合所有分类器(注意顺序)

如果获取不同的分类器?

  1. 方法一:还是放回式采样
  2. 方法二:给每一笔数据设置不同的权重,构成不同的数据集。之后再Loss损失函数中反应出权重即可。
    这里写图片描述

Adaboost

在训练集X1上获取了分类器f1,假设loss=0.25

改变权重获取训练集X2(X1变来的),使得f1的loss=0.5( 我们拿着放大镜看f1的弊端 [分类错误的数据加大权重,分类对的减小],从而我们可以找到f2来修复。)
这里写图片描述

  1. 第一次给f1出的是正常的卷子
  2. 第二次给f1出的是**“会的都不考,考的都不会”**的那种卷子,f1就蒙了。不过蒙了好啊,说明老师找到f1不会的东西了。怎么办呢?我们就去找f2同学,让f2来做这套卷子。新的卷子,f2就做的比f1好多了。
  3. f2做完了这第二套卷子,也有不会的啊。老师就又给f2出了你f2 **“会的都不考,考的都不会”**的卷子,这下f2蒙了,于是f3登场…
  4. 就这样,找来了越来越多的同学,题目再难也都能有人会做了

而数学上的重点就是要找到上图√3(我们把它记为d),来使得f2更好,计算公式: d=√[ (1-loss) / loss ]
这里写图片描述

Gradient Boosting

回过来思考Adaboost,就是不断寻找 小分类器f(t) 来完善 最终的分类器g(t)
这里写图片描述
这里写图片描述

我们在寻找 f(t) 的时候,究竟是如何判断它是我们想要的呢?
答:Loss函数

Loss必然与g(t)产生联系:loss(g(t))

有联系,那就好办了–>梯度下降:
这里写图片描述

一看,什么鬼?

其实,跟之前是差不多的:
这里写图片描述

后面通过梯度求得的其实就是理想的新分类器

Stacking

至于stacking,我的感觉就是Bagging参考了boosting之后,对原本的投票(取平均)机制进行了更新(主要是添加权重)

这里写图片描述

有了数据X,有了4个模型(小明、老王、老李、小毛),但是不知道这四个模型哪个好哪个辣鸡,所以干脆针对它们的输出Y再来一次分类器(Final Classifier),并进行训练。

于是乎,我们就能很好地利用原有的4个模型了!-

再来看看最常见的stacking图:
这里写图片描述

给了训练集(X, Y),通过交叉验证的方式获得(X, Y’) - - - - - - - 多了一撇
每个模型都获得一个Y’
再进行第二次的分类器训练(Final Classifier)—>获得模型权重
最终,组合集成–>获得最终模型
PS:上图绿色主要是保证数据集与模型的对应(应该是的…)

本文主要参考台湾大学李宏毅ML课程,加之自己的理解所写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值