Boosting和AdaBoost的可视化的清晰的解释

2024-06-21 09:38

本文主要是介绍Boosting和AdaBoost的可视化的清晰的解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


作者:Maël Fabien

编译:ronghuaiyang

前戏

可视化的方法,清楚的解释了Boosting和AdaBoost。

最近,在Kaggle竞赛和其他预测分析任务中,boosting技术正在兴起。我将尽可能清楚地解释boost和AdaBoost的概念。

在本文中,我们将讨论:

  • 快速回顾bagging

  • bagging的限制

  • boosting的详细概念

  • boosting的计算效率

  • 代码示例

I. Bagging的限制

接下来,考虑一个二元分类问题。我们要么把一个观测值归为0,要么归为1。这不是本文的目的,但是为了清晰起见,让我们回顾一下bagging的概念。

Bagging是一种代表“Bootstrap Aggregating”的技术。其实质是选取bootstrap样本,在每个样本上拟合一个分类器,并行训练模型。通常,在随机森林中,决策树是并行训练的。然后将所有分类器的结果平均成一个bagging分类器:

640?wx_fmt=png

Bagging分类器的公式

这个过程可以用下面的方法来说明。让我们考虑3个分类器,它们产生一个分类结果,可能是对的,也可能是错的。如果我们把这3个分类器的结果绘制出来,在某些区域,分类器是错误的。这些区域用红色表示。

640?wx_fmt=png

Bagging的例子

这个例子很好,因为当一个分类器是错误的,其他两个是正确的。通过投票分类器,你得到了很好的准确性!但是,正如你可能猜到的,在某些情况下,Bagging也不能正常工作,因为在相同的区域中,所有的分类器都是错误的。

640?wx_fmt=png

由于这个原因,Boosting背后的直觉如下:

  • 与其训练并行模型,还不如按顺序训练模型

  • 每个模型都应该关注前一个分类器表现不佳的地方

II. Boosting的介绍

a. 概念

上述直觉可以这样描述:

  • 对模型h1进行整个数据集的训练

  • 对h1表现不佳区域的数据做夸大来训练模型h2

  • 对h1≠h2的区域的数据进行夸大来训练模型h3

  • ...

我们不需要并行对模型进行训练,而是按顺序对它们进行训练。这就是boosting的本质!

Boosting通过随着时间的推移调整错误度量来训练一系列性能较差的算法,称为弱学习器。弱学习器的错误率略低于50%,如下图所示:

640?wx_fmt=png

弱学习器,能得到低于50%的错误率

b. 对误差加权

我们如何实现这样的分类器?通过在整个迭代中对误差加权!这将给以前分类器执行得不好的区域更多的权重。

让我们考虑二维图上的数据点。有些会被很好地分类,有些则不会。通常,在计算错误率时,每个错误的权重为1/n,其中n是要分类的数据点个数。

640?wx_fmt=png

没有加权的误差

现在,如果我们对误差施加一些权重:

640?wx_fmt=png

加权的误差

你现在可能会注意到,我们对没有很好分类的数据点给予了更多的权重。下面是加权过程的一个例子:

640?wx_fmt=png

加权过程的例子

最后,我们希望构建一个强大的分类器,它可能是这样的:

640?wx_fmt=png

强分类器

c. 树桩

你可能会问的一个问题是,一个强分类器需要实现多少个弱分类器才能正常工作?如何在每个步骤中选择每个分类器?

答案就在所谓树桩的定义中!树桩定义了一个1级决策树。主要的想法是,在每一步,我们要找到最好的树桩,也就是最好的数据分割,使整体误差最小化。你可以把树桩看作一个测试,在这个测试中,假设在一边的所有东西都属于第一类,而在另一边的所有东西都属于第0类。

树桩有很多可能的组合。让我们看看在这个简单的例子中有多少种组合?让我们花一分钟数一数。

640?wx_fmt=png

3个数据点的分割

答案是……12 !这看起来可能有点奇怪,但其实很容易理解。

640?wx_fmt=png

12个树桩

我们可以做12个可能的“测试”。每条分割线边上的“2”简单地表示了这样一个事实:一边的所有点都可以是属于类0或类1的点。因此,有两个测试嵌入其中。

在每次迭代t中,我们将选择分割数据最好的弱分类器ht,最大限度地降低整体错误率。回想一下,错误率是一个经过修改的错误率版本,它考虑到了前面介绍的内容。

d. 寻找最优分割

如上所述,在每个迭代t中,通过识别最佳弱分类器ht,通常是一棵有1个节点和2个叶子(一个树桩)的决策树,找到最佳分割。假设我们试图预测一个想借钱的人是以后会不会还钱:

640?wx_fmt=png

确定最优分割

在这种情况下,t时刻的最佳分割是在Payment history的树桩,因为这种分割的加权误差是最小的。

需要注意,在实践中,像这样的决策树分类器可以比简单的树桩更深入。这将是一个超参数。

e. 分类器组合

下一个逻辑步骤是将分类器组合成符号分类器,根据一个点将站在边界的哪一侧,它将被分类为0或1。可以这样实现:

640?wx_fmt=png

分类器组合

你认为有什么方法可以潜在地改进分类器吗?

通过在每个分类器上添加权重,避免对不同的分类器赋予相同的重要性。

640?wx_fmt=png

AdaBoost

f. 把上面的内容打个包

让我们用一个到目前为止已经介绍过的伪代码来总结一下。

640?wx_fmt=png

伪代码

要记住的关键因素是:

  • Z是一个常数,它的作用是使权值标准化,使它们加起来等于1 !

  • αt是权值,我们给每个分类器都分配一个权值

做完了!这个算法叫做AdaBoost。这是需要理解的最重要的算法,以便充分理解所有的boosting方法。

III. 计算

Boosting算法训练起来相当快,这很好。但是既然我们考虑了所有可能的残差并且递归地计算指数,为什么训练起来这么快呢?

这就是神奇之处。如果我们选择正确αt和Z,每一步权重的变化可以简化为:

640?wx_fmt=png

选择了α和Z之后的权值

这是一个非常有力的结果,它与权重应该随迭代变化的说法并不矛盾,因为分类不好的训练样本的数量下降了,而它们的总权重仍然是0.5 !

  • 不需要计算Z

  • 没有α

  • 没有指数

还有另一个技巧:任何试图分割两个分类良好的数据点的分类器都不会是最优的。甚至不需要计算它。

IV. 开始编程!

现在,我们将通过一个简单的手写数字识别示例快速了解如何在Python中使用AdaBoost。

import pandas as pd	
import numpy as np	
import matplotlib.pyplot as plt	
from sklearn.ensemble import AdaBoostClassifier	
from sklearn.tree import DecisionTreeClassifier	
from sklearn.metrics import accuracy_score	
from sklearn.model_selection import cross_val_score	
from sklearn.model_selection import cross_val_predict	
from sklearn.model_selection import train_test_split	
from sklearn.model_selection import learning_curve	
from sklearn.datasets import load_digits

我们现在加载数据:

dataset = load_digits()	
X = dataset['data']	
y = dataset['target']

X为长度为64的数组,这些数组只是拉平的8x8图像。该数据集的目的是识别手写数字。让我们来看看一个给定的手写数字:

plt.imshow(X[4].reshape(8,8))

640?wx_fmt=png

手写数字“4”的8x8图像

如果我们坚持使用深度为1(树桩)的决策树分类器,下面是如何实现AdaBoost分类器:

reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1))	
scores_ada = cross_val_score(reg_ada, X, y, cv=6)	
scores_ada.mean()

而且应该达到26%左右,这在很大程度上是可以改善的。其中一个关键参数是序列决策树分类器的深度。决策树的深度如何提高精度?

score = []	
for depth in [1,2,10] : 	reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=depth))	scores_ada = cross_val_score(reg_ada, X, y, cv=6)	score.append(scores_ada.mean())

在这个简单的例子中,深度为10时,得分最高,准确率为95.8%。

IV. 总结

人们已经讨论过 AdaBoost 是否会过拟合。最近,它被证明在某些时候会过拟合,人们应该意识到这一点。AdaBoost也可以作为一种回归算法使用。

AdaBoost在人脸检测中被广泛用于评估视频中是否有人脸。我将很快就这个话题再写一篇文章!在以后的文章中,我们还将介绍梯度增强:)

640?wx_fmt=png— END—

英文原文:https://towardsdatascience.com/boosting-and-adaboost-clearly-explained-856e21152d3e

640?wx_fmt=jpeg

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

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

这篇关于Boosting和AdaBoost的可视化的清晰的解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建