AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

news2024/11/18 11:41:47

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️
🐴作者:秋无之地

🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。

🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关

上一篇文章已经跟大家介绍过《PageRank(下):数据分析 | 数据挖掘 | 十大算法之一》,相信大家对PageRank(下)都有一个基本的认识。下面我讲一下,AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

一、AdaBoost背景

在数据挖掘中,分类算法可以说是核心算法,其中 AdaBoost 算法与随机森林算法一样都属于分类算法中的集成算法。

集成的含义就是集思广益,博取众长,当我们做决定的时候,我们先听取多个专家的意见,再做决定。集成算法通常有两种方式,分别是投票选举(bagging)和再学习(boosting)。投票选举的场景类似把专家召集到一个会议桌前,当做一个决定的时候,让 K 个专家(K 个模型)分别进行分类,然后选择出现次数最多的那个类作为最终的分类结果。再学习相当于把 K 个专家(K 个分类器)进行加权融合,形成一个新的超级专家(强分类器),让这个超级专家做判断。

所以你能看出来,投票选举和再学习还是有区别的。Boosting 的含义是提升,它的作用是每一次训练的时候都对上一次的训练进行改进提升,在训练的过程中这 K 个“专家”之间是有依赖性的,当引入第 K 个“专家”(第 K 个分类器)的时候,实际上是对前 K-1 个专家的优化。而 bagging 在做投票选举的时候可以并行计算,也就是 K 个“专家”在做判断的时候是相互独立的,不存在依赖性。

二、AdaBoost 的工作原理

了解了集成算法的两种模式之后,我们来看下今天要讲的 AdaBoost 算法。

AdaBoost 的英文全称是 Adaptive Boosting,中文含义是自适应提升算法。它由 Freund 等人于 1995 年提出,是对 Boosting 算法的一种实现。

什么是 Boosting 算法呢?Boosting 算法是集成算法中的一种,同时也是一类算法的总称。这类算法通过训练多个弱分类器,将它们组合成一个强分类器,也就是我们俗话说的“三个臭皮匠,顶个诸葛亮”。为什么要这么做呢?因为臭皮匠好训练,诸葛亮却不好求。因此要打造一个诸葛亮,最好的方式就是训练多个臭皮匠,然后让这些臭皮匠组合起来,这样往往可以得到很好的效果。这就是 Boosting 算法的原理。

我可以用上面的图来表示最终得到的强分类器,你能看出它是通过一系列的弱分类器根据不同的权重组合而成的。

假设弱分类器为 Gi​(x),它在强分类器中的权重 αi​,那么就可以得出强分类器 f(x):

有了这个公式,为了求解强分类器,你会关注两个问题:

  1. 如何得到弱分类器,也就是在每次迭代训练的过程中,如何得到最优弱分类器?
  2. 每个弱分类器在强分类器中的权重是如何计算的?

我们先来看下第二个问题。实际上在一个由 K 个弱分类器中组成的强分类器中,如果弱分类器的分类效果好,那么权重应该比较大,如果弱分类器的分类效果一般,权重应该降低。所以我们需要基于这个弱分类器对样本的分类错误率来决定它的权重,用公式表示就是:

其中 ei​ 代表第 i 个分类器的分类错误率。

然后我们再来看下第一个问题,如何在每次训练迭代的过程中选择最优的弱分类器?

实际上,AdaBoost 算法是通过改变样本的数据分布来实现的。AdaBoost 会判断每次训练的样本是否正确分类,对于正确分类的样本,降低它的权重,对于被错误分类的样本,增加它的权重。再基于上一次得到的分类准确率,来确定这次训练样本中每个样本的权重。然后将修改过权重的新数据集传递给下一层的分类器进行训练。这样做的好处就是,通过每一轮训练样本的动态权重,可以让训练的焦点集中到难分类的样本上,最终得到的弱分类器的组合更容易得到更高的分类准确率。

我们可以用 Dk+1​ 代表第 k+1 轮训练中,样本的权重集合,其中 Wk+1,1​ 代表第 k+1 轮中第一个样本的权重,以此类推 Wk+1,N​ 代表第 k+1 轮中第 N 个样本的权重,因此用公式表示为:

第 k+1 轮中的样本权重,是根据该样本在第 k 轮的权重以及第 k 个分类器的准确率而定,具体的公式为:

三、AdaBoost 算法示例

了解 AdaBoost 的工作原理之后,我们看一个例子,假设我有 10 个训练样本,如下所示:

现在我希望通过 AdaBoost 构建一个强分类器。

该怎么做呢?按照上面的 AdaBoost 工作原理,我们来模拟一下。

首先在第一轮训练中,我们得到 10 个样本的权重为 1/10,即初始的 10 个样本权重一致,D1=(0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1)。

假设我有 3 个基础分类器:

我们可以知道分类器 f1 的错误率为 0.3,也就是 x 取值 6、7、8 时分类错误;分类器 f2 的错误率为 0.4,即 x 取值 0、1、2、9 时分类错误;分类器 f3 的错误率为 0.3,即 x 取值为 3、4、5 时分类错误。

这 3 个分类器中,f1、f3 分类器的错误率最低,因此我们选择 f1 或 f3 作为最优分类器,假设我们选 f1 分类器作为最优分类器,即第一轮训练得到:

根据分类器权重公式得到:

然后我们对下一轮的样本更新求权重值,代入 Wk+1,i​ 和 Dk+1​ 的公式,可以得到新的权重矩阵:D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。

在第二轮训练中,我们继续统计三个分类器的准确率,可以得到分类器 f1 的错误率为 0.1666*3,也就是 x 取值为 6、7、8 时分类错误。分类器 f2 的错误率为 0.0715*4,即 x 取值为 0、1、2、9 时分类错误。分类器 f3 的错误率为 0.0715*3,即 x 取值 3、4、5 时分类错误。

在这 3 个分类器中,f3 分类器的错误率最低,因此我们选择 f3 作为第二轮训练的最优分类器,即:

根据分类器权重公式得到:

同样,我们对下一轮的样本更新求权重值,代入 Wk+1,i​ 和 Dk+1​ 的公式,可以得到 D3=(0.0455,0.0455,0.0455,0.1667, 0.1667,0.01667,0.1060, 0.1060, 0.1060, 0.0455)。

在第三轮训练中,我们继续统计三个分类器的准确率,可以得到分类器 f1 的错误率为 0.1060*3,也就是 x 取值 6、7、8 时分类错误。分类器 f2 的错误率为 0.0455*4,即 x 取值为 0、1、2、9 时分类错误。分类器 f3 的错误率为 0.1667*3,即 x 取值 3、4、5 时分类错误。

在这 3 个分类器中,f2 分类器的错误率最低,因此我们选择 f2 作为第三轮训练的最优分类器,即:

我们根据分类器权重公式得到:

假设我们只进行 3 轮的训练,选择 3 个弱分类器,组合成一个强分类器,那么最终的强分类器 G(x) = 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)。

实际上 AdaBoost 算法是一个框架,你可以指定任意的分类器,通常我们可以采用 CART 分类器作为弱分类器。通过上面这个示例的运算,你体会一下 AdaBoost 的计算流程即可。

四、总结

今天我给你讲了 AdaBoost 算法的原理,你可以把它理解为一种集成算法,通过训练不同的弱分类器,将这些弱分类器集成起来形成一个强分类器。在每一轮的训练中都会加入一个新的弱分类器,直到达到足够低的错误率或者达到指定的最大迭代次数为止。实际上每一次迭代都会引入一个新的弱分类器(这个分类器是每一次迭代中计算出来的,是新的分类器,不是事先准备好的)。

在弱分类器的集合中,你不必担心弱分类器太弱了。实际上它只需要比随机猜测的效果略好一些即可。如果随机猜测的准确率是 50% 的话,那么每个弱分类器的准确率只要大于 50% 就可用。AdaBoost 的强大在于迭代训练的机制,这样通过 K 个“臭皮匠”的组合也可以得到一个“诸葛亮”(强分类器)。

当然在每一轮的训练中,我们都需要从众多“臭皮匠”中选择一个拔尖的,也就是这一轮训练评比中的最优“臭皮匠”,对应的就是错误率最低的分类器。当然每一轮的样本的权重都会发生变化,这样做的目的是为了让之前错误分类的样本得到更多概率的重复训练机会。

同样的原理在我们的学习生活中也经常出现,比如善于利用错题本来提升学习效率和学习成绩。

版权声明

本文章版权归作者所有,未经作者允许禁止任何转载、采集,作者保留一切追究的权利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

张量-复数操作函数

tf.complex(real,imag,name None),该函数用于将两实数转化为复数。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()real tf.constant([2.25,3.25],dtype tf.float64) imag tf.constant([4.75,5.75],dtype tf.float64)with tf.Session() as …

Bigemap中如何添加21级的影像图

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人在咨询如何查看21级的影像图 这里先来说一下影像的像素分辨率,一般17级是1米的、18级是0.5米、19级是0.25米以此类推,咱们国家测绘要求允…

HTTP/2和HTTP/3简介(上)(下)【中科大-郑烇老师】

文章目录 我的总结:HTTP 1.0HTTP 1.0 支持 多个并行连接HTTP 1.1 持久连接(非流水线和流水线) HTTP/2HTTP /3HTTP的演化 from : https://www.bilibili.com/video/BV1R34y1G76h/?spm_id_from333.788&vd_source21cce77bb69d40a…

Zookeeper经典应用场景实战(二)

文章目录 1、 Zookeeper 分布式锁实战1.1、 什么是分布式锁1.2、 基于数据库设计思路1.3、 基于Zookeeper设计思路一1.4、 基于Zookeeper设计思路二 1、 Zookeeper 分布式锁实战 1.1、 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候,大家往往采用Sync…

Bootstrap对段落和文本的设置(与段落-和文本相关的类)

目录 01-利用lead类突出显示段落文本02-为段落添加强调样式03-给段落文字添加鼠标停留时的说明语04-添加引用信息05-文本对齐(左对齐、居中对齐、右对齐、两端对齐)06-阻止文本换行07-以省略号显示溢出的文本内容08-转换文本内容中字母的大小写09-设置文本字体的粗细和斜体10-取…

The Sandbox 与 TB Media Global 达成合作

这家总部位于泰国的公司以开发原创、适合家庭观看的内容而闻名,将在 The Sandbox 中推出新的虚拟体验。 备受赞誉的 IP 开发公司 T&B Media Global 正式加入 The Sandbox 元宇宙。该公司以专注于故事讲述艺术而闻名。这次合作不仅为虚拟世界带来了新的维度&…

java常见API----indexof

API indexof API toUpperCase()用法及实例: package daysreplace;import java.util.Locale;public class IndexofApiTest {public static void main(String[] args) {String str "nanyanghhhhh";String bigStr "KKKKAAAAHHHH";System.…

4.物联网射频识别,RFID开发【智能门禁项目】

补充:学习路径 一。项目介绍及需求分析 1.酒店智能门禁使用场景介绍 1.客人入住 客人在前台办理入住手续,前台管理员通过门禁管理系统为客户开一张门禁卡 客户持卡到相应客房,用IC 卡刷卡开门 客人过了入住时间后,卡自动失效&a…

第十课 贪心

文章目录 第十课 贪心lc 322.零钱兑换--中等题目描述代码展示 lc860.柠檬水找零--简单题目描述代码展示 lc455.分发饼干--简单题目描述代码展示 lc122.买卖股票的最佳时机II--中等题目描述代码展示 lc45.跳跃游戏II--中等题目描述代码展示 lc1665.完成所有任务的最少初始能量--…

WPF中样式静态、动态资源、资源字典

1、绑定静态资源后,样式不会发生改变 绑定动态资源后,资源样式发生改变,控件也会改变 2、资源字典

为什么越来越多的人转行网络安全?

为什么越来越多的人转行网络安全? 目前,我国互联网已经从前期的爆发增长进入稳定发展阶段,同时每年大量计算机相关专业的毕业生进入就业赛道,导致IT行业逐渐趋于饱和状态,甚至出现裁员现象,去年很多大厂都…

《DevOps 精要:业务视角》- 读书笔记(二)

DevOps 精要:业务视角(二) 第2章 基础2.1 精益生产2.1.1 关键事实2.1.2 挑战 2.2 敏捷2.2.1 关键事实2.2.2 挑战 第2章 基础 2.1 精益生产 2.1.1 关键事实 正如1.2节提到的,DevOps非常依赖于精益生产的原则与实践。有些人甚至相信&#xf…

软件测试(功能、工具、接口、性能、自动化、测开)详解

一、软件测试功能测试 测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 黑盒测试常见测试用例…

【1++的Linux】之文件(一)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,初识文件二,文件接口 一,初识文件 文件就是文件内容属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。 我们访问…

张量-矩阵操作函数

tf.diag(diagonal,name None),该函数返回一个给定对角值得对角tensor。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()diagonal tf.constant([2,3,4,5])with tf.Session() as sess:print(sess.run(tf.diag(diagonal))) tf.diag_part(input,na…

maven的pom.xml文件显示被删除

文章目录 1.问题情况2.问题分析3.问题解决 1.问题情况 2.问题分析 这些 pom.xml 文件被 maven 视为了忽略文件。 3.问题解决 路径:File --> Settings --> Build,Execution,Deployment --> Build Tools --> Maven --> Ignor…

Vs - Qt - 下拉窗口示例

下列代码定义了一个窗口&#xff0c;窗口采用竖直布局&#xff1a;一个按钮及一个label。按下按钮时候&#xff0c;窗口扩张&#xff0c;显示label控件。再次按下按钮时&#xff0c;窗口收缩&#xff0c;隐藏label控件。 详细代码如下&#xff1a; #include <QApplication&g…

SAP从入门到放弃系列之QM样本确定

目录 一、样本确定概述-Sample Determination1.1、样本确定的规则1.2、规则维护方式1.2.1、物料主数据的维度1.2.2、任务清单的维度1.2.2.1、采样过程-Sampling Procedure 二、采样过程维护2.1 采样过程-Sampling Procedures概述样本类型评估模式检验点 一、样本确定概述-Sampl…

开源考试系统的安全性及防护措施分析

开源考试系统是一种基于开放源代码的在线考试及评估平台&#xff0c;它提供了灵活、可定制和易于部署的解决方案来满足不同用户的需求。然而&#xff0c;开源考试系统的安全性问题一直备受关注。因为在线考试平台涉及到大量敏感数据和用户隐私&#xff0c;所以必须采取一系列的…

chrome窗口

chrome 窗口的层次&#xff1a; 父窗口类名&#xff1a;Chrome_WidgetWin_1 有两个子窗口&#xff1a; Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…