Boosting和Bagging: 如何开发一个鲁棒的机器学习算法

2024-06-21 09:38

本文主要是介绍Boosting和Bagging: 如何开发一个鲁棒的机器学习算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”

作者:Ben Rogojan

编译:ronghuaiyang

导读

机器学习和数据科学需要的不仅仅是将数据放入python库中并利用得到的结果。数据科学家需要真正理解数据和数据背后的过程,才能实现一个成功的系统。这篇文章从Bootstraping开始介绍,让你听懂什么是Boosting,什么是Bagging。

机器学习和数据科学需要的不仅仅是将数据放入python库中并利用得到的结果。

数据科学家需要真正理解数据和数据背后的过程,才能实现一个成功的系统。

实现这个的一个关键方法是知道模型何时可以从使用bootstrapping中受益。这些就是所谓的集成模型。集成模型的例子有AdaBoost和随机梯度提升。

为什么使用集成模型?

它们可以帮助提高算法的准确性或提高模型的鲁棒性。这方面的两个例子是Boosting和Bagging。对于数据科学家和机器学习工程师来说,Boosting和Bagging是必须知道的主题。特别是如果你打算参加数据科学/机器学习面试

本质上,集成学习遵循集成这个词。不同的是,不是让几个人用不同的八度来创造一个优美的和声(每个声音填补另一个的空白)。集成学习使用同一算法的数百到数千个模型,这些模型一起工作以找到正确的分类。

另一种考虑集成学习的方法是盲人与大象的寓言。每个盲人都发现了大象的一个特征,他们都认为这是不同的东西。然而,如果他们聚在一起讨论这个问题,他们也许能够弄明白他们在看什么。

使用诸如Boosting和Bagging这样的技术可以提高统计模型的鲁棒性并减少方差。

现在的问题是,这些不同的“B”开头的词,都有什么区别呢?

Bootstrapping

首先我们来讨论一下bootstrapping的重要概念。这一点有时会被忽略,因为许多数据科学家会直接去解释“Boosting”和“Bagging”。这两者都需要bootstrapping。

640?wx_fmt=png

Figure 1 Bootstrapping

在机器学习中,bootstrap方法是指随机抽样和替换。这种样本称为重采样。这使得模型或算法能够更好地理解重采样中存在的各种偏差、方差和特征。从数据中提取一个样本允许重新采样包含不同的特征,而这些特征可能是作为一个整体包含的。如图1所示,其中每个样本总体都有不同的部分,而且没有一个是相同的。这将影响数据集的总体均值、标准差和其他描述性指标。反过来,它可以开发更健壮的模型。

Bootstrapping对于小型数据集来说也非常有用,这些数据集可能有过拟合的趋势。事实上,我们向一家公司推荐了这个,因为他们的数据集离“大数据”还很远。在这种情况下,Bootstrapping 是一种解决方案,因为利用Bootstrapping 的算法可以更加健壮,并根据所选择的方法(Boosting或Bagging)处理新的数据集。

使用bootstrap方法的原因是它可以测试解的稳定性。通过使用多个样本数据集,然后测试多个模型,可以提高鲁棒性。也许一个样本数据集的均值比另一个样本数据集的均值大,或者有不同的标准差。这可能会破坏过拟合并且没有使用有不同变化的数据集进行测试过的模型。

bootstrapping 变得非常普遍的原因之一是计算能力的增强。这使得使用不同的重采样可以进行比以前多很多倍的排列。Bootstrapping在Bagging和boost中都有使用,下面将对此进行讨论。

Bagging

Bagging实际上是指(Bootstrap Aggregators)。大多数使用bagging算法引用的论文或帖子都会引用Leo Breiman[1996年]的一篇论文“bagging Predictors”。

Leo将Bagging描述为:

Bagging predictors是一种生成一个预测器的多个版本并使用这些版本来获得一个聚合预测器的方法

Bagging所做的是帮助减少方差,这些模型可能非常准确,但只基于它们所训练的数据。这也被称为过拟合。

过拟合是指一个函数太适合数据。这通常是因为实际的方程太复杂,无法考虑每个数据点和离群值。

640?wx_fmt=png

Figure 2 Overfitting

另一个容易过拟合算法的例子是决策树。使用决策树开发的模型需要非常简单的启发式。决策树由一组if-else语句组成,这些语句按照特定的顺序执行。因此,如果将数据集更改为新的数据集,那么与前一个数据集相比,底层特征的分布可能会有一些偏差或差异。这是因为数据不适合模型。

Bagging通过采样和替换数据来在数据中创建自己的方差,从而绕过这个问题。Bagging同时测试多个假设(模型)。反过来,这通过使用多个很可能由具有各种属性(中值、平均值等)的数据组成的样本来减少噪声。

一旦每个模型都有了假设。模型使用投票进行分类平均进行回归。这就是“Bootstrap Aggregating”中的“Aggregating”发挥作用的地方。每个假设的权重都是一样的。当我们稍后讨论boost时,这是这两种方法不同的地方之一。

640?wx_fmt=png

Figure 3 Bagging

本质上,所有这些模型同时运行,并对哪个假设最准确进行投票。

这有助于减少方差,即减少过拟合。

Boosting

Boosting 是指一组利用加权平均使弱学习器变成强学习器的算法。与bagging不同,bagging让每个模型独立运行,然后在最后聚合输出,而不优先于任何模型。Boosting 全靠“团队合作”。每个运行的模型都规定了下一个模型将关注的特性。

Boosting也需要bootstrapping。然而,这里还有另一个区别。与bagging不同,增加每个数据样本的权重。这意味着一些样本将比其他样本运行得更频繁。

为什么要对数据样本进行加权呢?

640?wx_fmt=png

Figure 4 Boosting

当boost运行每个模型时,它会跟踪哪些数据样本是最成功的,哪些不是。输出分类错误最多的数据集被赋予更重的权重。这些数据被认为更复杂,需要更多的迭代来正确地训练模型。

在实际分类阶段,boosting处理模型的方式也有所不同。在boosting中,模型的错误率被跟踪,因为更好的模型被赋予更好的权重。

这样,当“投票”发生时,就像bagging一样,结果更好的模型对最终的输出有更的强拉动力。

总结

Boosting 和bagging 都是减少方差的好方法。集成方法通常比单个模型效果好。这就是为什么许多Kaggle赢家使用集成方法的原因。这里没有讨论的是stacking。但是,这需要它自己的post。

然而,他们不会解决所有的问题,他们自己也有自己的问题。有很多不同的原因。bagging 在模型过拟合时对减小方差有很大的作用。然而,在这两种方法中,Boosting 更有可能是更好的选择。Boosting 也更有可能导致performance问题。这对于减少不匹配模型中的偏差也很有帮助。

这就是经验和专家的用武之地!可以很容易地跳到第一个有效的模型上。然而,重要的是分析算法及其选择的所有特性。例如,如果决策树设置了特定的叶节点,那么问题来了:为什么要这么设置呢?如果不能用其他数据点可视化的方法来支持这个观点,那么可能就不应该这样去实现。

这不仅仅是在各种数据集上尝试AdaBoost或随机森林。根据算法得到的结果,以及有什么支持,驱动最终的算法。

640?wx_fmt=png— END—

英文原文:https://hackernoon.com/how-to-develop-a-robust-algorithm-c38e08f32201

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

这篇关于Boosting和Bagging: 如何开发一个鲁棒的机器学习算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080860

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.