码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
5.1-集成学习
文章目录
集成框架(Framework of Ensemble)
一、 Ensemble: Bagging
1.1 决策树(Decision Tree)
1.2 随机森林(Random Forest)
二、Ensemble: Boosting
2.1 寻找不同的分类器
2.2 Adaboost
2.3 数学推导
2.4 边界(Margin)
2.5 Gradient Boosting
三、Ensemble: Stacking
集成框架(Framework of Ensemble)
一、 Ensemble: Bagging
Bagging做的事情就是创造出不同的数据集,再用不同的数据集各自训练一个复杂的模型,虽然每一个模型单独拿出来看方差(Variance)都很大,但把所有的模型集合起来求平均之后,就会得到一个方差很小,偏置值也很小的理想模型。
第一件事就是创造出不同的数据集,首先我们对原数据集进行随机抽样得到多个不一样的数据集。如果是回归问题,我们就采用平均(Average)的方法,如果是分类的问题,我们就采取投票(Average)的方法。
那什么时候做Bagging呢?只有在你的模型很复杂,担心他过拟合时才做Bagging,因为做Bagging的目的就是为了降低Variance。
1.1 决策树(Decision Tree)
决策树就是一个非常需要做Bagging的方法,因为它十分容易过拟合。随机森林就是决策树做Bagging后的版本。
做决策树需要注意的地方:
需要多少分支
要用什么样的标准来做分支
什么时候停止分支…
右图是决策树的一个示例,只要深度够深,我们就可以将错误率降到0
1.2 随机森林(Random Forest)
做随机森林时光采取随机采样是不够的,还要在每次产生决策树的分支时都随机决定哪些特征是不能用的。这样才能保证即使用的是同一个数据集里产生出来的决策树也是不一样的,最后将所有的决策树集合起来就得到随机森林。
out-of-bag:如果使用bagging的方法,那么我们可以不用将数据集切分成训练集和验证集,但是一样有验证的效果。如左图表格,f
2
和f
4
并没有看到过x
1
这笔数据,那么我们就可以拿x
1
这笔数据来验证我们的模型f
2
和f
4
,最终计算4个模型的平均误差。
二、Ensemble: Boosting
Bagging是应用在一些很强的模型上来解决过拟合的问题,而Boosting是应用在一些很弱的模型上来解决欠拟合的问题。
2.1 寻找不同的分类器
boosting的原理是首先找到第一个分类器f
1
(x),然后找到一个与f
1
(x)互补的分类器f
2
(x),也就是f
2
(x)与f
1
(x)的相似度要尽可能的低,接下来找到一个与f
2
(x)互补的分类器f
3
(x),就这样一直找下去,我们会得到一个分类器的集合,将他们线性组合起来就得到了我们最终的分类器。
找分类器这件事是有顺序的,必须找到前一个才能开始找下一个,不能并行执行。
右图介绍了如何通过给每一笔数据集一个权重u
n
来训练生成不同的分类器,其评估函数loss相比普通的loss也只是多乘上了一个权重u
n
2.2 Adaboost
如左图,首先调整训练集的权重u
n
,找到一组训练集让f
1
(x)的正确率只有50%,再用这笔训练集去训练生成f
2
(x)。
具体原理如右图,就是让模型f
1
(x)在权重一样的训练集上进行训练,训练结束后降低回答正确的训练集权重u
1
,u
3
,u
4
,提高回答错误的训练集权重u
2
,这样就可以找到一组训练集让f
1
(x)的正确率只有50%
下面是Adaboost的算法推导过程
下面是通过Adaboost找到三个较弱的分类器,最终组成一个强大的分类器的过程。
2.3 数学推导
α t \alpha_t
α
t
代表每个分类器的权重,一共有
f 1 . . . f t f_1...f_t
f
1
...
f
t
共计 t 个分类器,随着 T 数量的增加,我们的误差会变得越来越小。
2.4 边界(Margin)
根据左图可以很清晰的看到Margin的表达式,以及分类器的数量越多,Margin越大,在测试集上的表现越好。
下图是Adaboost+决策树的表现,树的深度为5,当树的数量达到100时,就可以很好的绘制出初音的轮廓了。这是之前使用Bagging,随机森林都无法做到的事情。
2.5 Gradient Boosting
下面是Boosting的一般表达式 g
t
(x) 的求解过程,根据最后一张图的结论可以看出Adaboost整件事情也是在做梯度下降,只是求梯度的不是一个参数,而是一个函数 g(x) 。并且 Adaboost的目标函数可以任意更改。
三、Ensemble: Stacking
将大家做的模型都组合起来,这就需要一个最终的分类器为大家的模型赋予不同的权重,为了防止小明等人的模型是过拟合而获得较高的权重,就需要准备两笔训练集。一笔用来训练小明等人的模型,一笔用来训练最终的分类器。
相关阅读:
区块链学姐:6月27日 以太坊久居1200大关下,多头量能已开始受阻?
Docker的优势和应用场景
chrome控制台怎么看hover的样式
windows10通过coursier安装scala
Tronapi-波场接口-源码无加密-可二开--附接口文档-基于ThinkPHP5封装-作者详细指导-2022年7月1日08:43:06
安装nodejs
Topsis与熵权法
.NET周刊【8月第3期 2023-08-20】
揭秘 FineVideo 数据集构建的背后的秘密
git删除commit的历史大文件记录
原文地址:https://blog.csdn.net/weixin_46227276/article/details/126279410
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号