(八)Python 中的 AdaBoost 分类器实例

7. Adaboost原理以及代码实现 该篇博客主要介绍了Adaboost算法的原理和实现过程,Adaboost是一种基于弱分类器的集成学习算法,它的核心思想是通过多个弱分类器的集成来构建一个更强大的分类器。文章首先介绍了Adaboost算法的原理,包括基本流程和重要的公式推导,然后详细介绍了如何使用Python实现Adaboost算法,包括构建Adaboost类和实现fit、predict和score等方法。最后,通过对乳腺癌数据集的实验,展示了Adaboost算法在二分类问题上的应用效果。完整的实验代码在我的github上👉。 阅读详情

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


(一)机器学习中的集成学习入门

(二)bagging 方法

(三)使用Python进行交易的随机森林算法

(四)Python中随机森林的实现与解释

(五)如何用 Python 从头开始实现 Bagging 算法

(六)如何利用Python从头开始实现随机森林算法

(七)AdaBoost 简介

(八)Python 中的 AdaBoost 分类器实例


boosting 算法背后的思路是按照顺序训练预测模型,每个模型都试图去纠正前面的错误。两种最常见的模型就是AdaBoost 和 Gradient Boosting。在上一篇文章中,我们已经介绍了 AdaBoost 。从较高的层面上看,AdaBoost 类似于随机森林,因为它们都统计了森林中每个决策树所做的预测,从而来决定最终的分类。但是,它们之间肯定有一些微妙的差异。例如,在 AdaBoost 中,决策树的深度为 1。此外,每个决策树做出的预测对模型的最终预测产生不同的影响。

算法

在前面的实例中,我们将使用一个数据集,给定一些人的特征,来判断这个人是不是受欢迎。

weightsmartpolitefitattractive
180nononono
150yesYesnono
175yesYesyesyes
165Yesyesyesyes
190noyesNono
201yesyesyesyes
185yesyesnoyes
168YesNoYesyes
Step 1:初始化样本权重

在 AdaBoost 的第一步中,每个样本都与一个权重相关联,该权重表明它在分类方面的重要性。最初,所有样本具有想听的权重。(1除以样本总数, 1 / N 1/N 1/N)

weightsmartpolitefitattractiveSample weight
180nononono1/8
150yesYesnono1/8
175yesYesyesyes1/8
165Yesyesyesyes1/8
190noyesNono1/8
201yesyesyesyes1/8
185yesyesnoyes1/8
168YesNoYesyes1/8
Step 2:使用每个特征去构建决策树,对数据进行分类并评估结果

接下来,对于每个特征,我们构建一个深度为 1 的决策树。然后,我们使用每个决策树对数据进行分类。然后,我们将每棵树的预测与训练集中的实际标签进行比较。我们对训练样本中得到最好的结果的特征和树模型使其成为森林中的下一课树。

例如,假设我们建造了一棵树,如果人 smart = yes,那么我们就认为这个人具有吸引力。如果人 smart = no,那么我们就认为这个人没有吸引力。

在这里插入图片描述

根据他们是否 smart 进行分类,决策树错误的将一个人计算错误了。将一个 smart = yes 的人归纳为吸引,但真实情况是不吸引。

Step 3:计算最终分类中树的重要性

一旦我们决定了决策树。我们使用前面的公式来计算它在最终分类中的权重

s i g n i f i c a n c e = 1 2 l o g ( 1 − t o t a l e r r o r t o t a l e r r o r ) significance = \frac{1}{2}log(\frac{1-totalerror}{totalerror}) significance=21​log(totalerror1−totalerror​)

totalerror 是错误分类的样本的权重之和。回到我们的例子,total error 应该等于如下:

t o t a l e r r o r = s u m o f w e i g h t s f o r i n c o r r e c t l y c l a s s i f i e d s a m p l e s = 1 8 ∗ 1 = 1 8 total error = sum of weights for incorrectly classified samples= \frac{1}{8} * 1 = \frac{1}{8} totalerror=sumofweightsforincorrectlyclassifiedsamples=81​∗1=81​

我们将 totalerror 参数插入到我们的公式中,我们得到:

s i g n i f i c a n c e = 1 2 l o g ( 1 − 1 8 1 8 ) = 0.97 significance = \frac{1}{2} log(\frac{1-\frac{1}{8}}{\frac{1}{8}}) = 0.97 significance=21​log(81​1−81​​)=0.97

正如我们稍后将看到的,这个数字用于后续的权重更新。

Step 4:更新样本权重,以便下一个决策树将上一个决策树所产生的错误考虑在内

我们查看当前树分类不正确的样本,并使用以下公式增加其相关权重。

n e w s a m p l e w e i g h t = s a m p l e w e i g h t ∗ e x p ( s i g n i f i c a n c e ) newsampleweight=sampleweight * exp(significance) newsampleweight=sampleweight∗exp(significance)

这里没有什么花哨的东西,我们使用 e 来提高权重,是因为我们希望新的样本权重呈现指数增长。

n e w s a m p l e w e i g h t = 1 8 ∗ e x p ( 0.97 ) = 1 8 ∗ 2.64 = 0.33 newsampleweight=\frac{1}{8} * exp(0.97) = \frac{1}{8} * 2.64 = 0.33 newsampleweight=81​∗exp(0.97)=81​∗2.64=0.33

然后,我们使用以下公式查看树正确分类的样本,并且降低其相关权重。

n e w s a m p l e w e i g h t = s a m p l e w e i g h t ∗ e x p ( − s i g n i f i c a n c e ) newsampleweight=sampleweight * exp(- significance) newsampleweight=sampleweight∗exp(−significance)

该方程跟此前的方程式相同,我们只是将 e 提高到负指数。

n e w s a m p l e w e i g h t = 1 8 ∗ e x p ( − 0.97 ) = 1 8 ∗ 0.38 = 0.05 newsampleweight=\frac{1}{8} * exp(-0.97) = \frac{1}{8} * 0.38 = 0.05 newsampleweight=81​∗exp(−0.97)=81​∗0.38=0.05

这里的主要内容是,前一个树桩错误分类的样本应该与较大的样本权重相关联,并且正确分类的样本应该与较小的样本权重相关联。

注意,如果我们将所有样本权重加起来,我们得到的是一个小于 1 的数字。因此,我们将新样本权重标准化,使得他们加起来为 1 。

weightsmartpolitefitattractiveSample weightnew weightnormalized weight
180nononono1/80.050.07
150yesYesnono1/80.330.49
175yesYesyesyes1/80.050.07
165Yesyesyesyes1/80.050.07
190noyesNono1/80.050.07
201yesyesyesyes1/80.050.07
185yesyesnoyes1/80.050.07
168YesNoYesyes1/80.050.07
Step 5:形成一个新的数据集

我们首先创建的一个与原始数据集大小相同的新数据集。然后,想象一下轮盘赌桌,其中每个口袋对应一个样本权重。我们随机选择 0 到 1 之间的数字。每个数字落在的位置决定了我们在新的数据集中放置的样本。

在这里插入图片描述

由于错误分类的样本相对于其他样本具有更高的权重,因此随机数落在其分布的切片下的可能性更大。因此,新数据集将倾向于包含由前一树错误分类的样本的多个副本。因此,当我们回到评估每个决策树所做预测的步骤时,得分最高的那个将正确的分类前一个树被错误分类的样本。

Step 6:重复步骤 2 到 5,直到迭代次数等于超参数指定的数量(即估计量的数量)
Step 7:使用决策树林来预测训练集之外的数据

AdaBoost 模型通过让森林中的每棵树对样本进行分类来进行预测。然后,我们根据它们的决定将树分成几组。对于每个组,我们将组内每棵树的重要性加起来。森林作为一个整体进行的最终分类由综合最大的群体决定。

在这里插入图片描述

代码

让我们看看如何在 Python 中实现 AdaBoost 。首先,我们导入以下库。

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import LabelEncoder

在这个例子中,我们将使用 AdaBoost 将肿瘤归类为恶性或者良性肿瘤。我们使用 scikit-learn API 将数据集导入到我们的程序中。

breast_cancer = load_breast_cancer()
X = pd.DataFrame(breast_cancer.data, columns=breast_cancer.feature_names)
y = pd.Categorical.from_codes(breast_cancer.target, breast_cancer.target_names)

每当我们使用分类功能时,我们必须将其编码为数字。对于这个问题,我们将恶性设置为 1 ,并将良性设置为 0 。

encoder = LabelEncoder()
binary_encoded_y = pd.Series(encoder.fit_transform(y))

我们将数据分为训练集和测试集,来评估我们的模型。

train_X, test_X, train_y, test_y = train_test_split(X, binary_encoded_y, random_state=1)

接下来,我们构建并将我们的模型拟合到训练集。max_depth = 1 用于告诉我们的模型我们希望我们的森林中单颗树的只有一个节点。n_estimators 用于制定树林中树的总数。

classifier = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=1),
    n_estimators=200
)
classifier.fit(train_X, train_y)

我们使用我们的模型来预测肿瘤是否恶性的或者良性的。

predictions = classifier.predict(test_X)

最后,我们使用混淆矩阵评估模型。该模型产生了 2 个误报和 3 个假阴性。

confusion_matrix(test_y, predictions)

输出结果为:

[[86, 2], [3, 52]]

最后

与随机森林一样,AdaBoost 通过对每个样本应用多个决策树并组合各个树的预测来进行预测。然而,在 AdaBoost 算法中,不是采用森林中每个决策树所作出的预测的平均值,而是每个决策树对最终预测贡献的不同的量

分类分析|贝叶斯分类器及其Python实现 分类是数据挖掘的主要方法,通过有指导的学习训练建立分类模型。分类的目的是通过学习,得到一个分类函数或分类模型(也常常称作分类器),该模型能够把数据集中的对象映射到给定类别中的某一个类上。分类和回归都属于预测建模,分类用于预测可分类属性或变量,而回归用于预测连续的属性取值。 阅读详情

相关推荐

Python中的AdaBoost分类器:集成方法与模型构建

集成方法的核心思想是通过结合多个模型的预测结果来提高整体性能。Bagging:通过并行训练多个模型,并对它们的预测结果进行投票或平均。例如,随机森林(Random Forest)就是基于Bagging的集成方法。Boosting:通过顺序训练多个模型,每个模型都试图纠正前一个模型的错误。AdaBoost是Boosting的代表算法之一。Stacking:通过训练一个元模型来结合多个基模型的预测结果。AdaBoost 是一种强大的集成学习方法,具有高准确性、易于实现和自动处理样本权重等优点。

python收藏家的博客 990

Adaboost分类算法原理及代码实例 python

Adaboost分类算法原理及代码实例一、Adaboost 简介一、Adaboost 算法过程二、简单实例三、python 实现3.1 sklearn.AdaBoostClassifier 参数说明3.2 导入相关库与数据集3.3 划分训练集、预测集3.4 Adaboost模型训练3.5 模型预测与评价 一、Adaboost 简介      集成学习(Ensemble Learning) 是机器学习领域表现最强的一大分支,主要原理是将多个弱机器学习器结合,构建一个有较强性能的机器学习器。集成学习方法可以分为

small__roc的博客 8642

AdaBoost算法原理及实例

AdaBoost算法原理及实例 Adaboost相关函数 弱分类器的误差率 ek=P(Gk(xi)≠yi)=∑i=1mwkiI(Gk(xi)≠yi) e_{k}=P\left(G_{k}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{m} w_{k i} I\left(G_{k}\left(x_{i}\right) \neq y_{i}\right) ek​=P(Gk​(xi​)​=yi​)=i=1∑m​wki​I(Gk​(xi​)​=yi​)

kui_kui的博客 891

数据挖掘导论 | 分类器的Python实现

本文将从分类器指标的计算和ROC图像绘制,使用鸢尾花数据集来讲解分类器中代码的含义。

m0_60066036的博客 767

AdaBoost算法及其应用

1.集成方法集成方法是将不同的分类器组合在一起将测试数据集进行分类的方法,可以是不同算法的集成或是同一算法在不同设置下的集成,也可以将数据集不同部分分配给不同分类器的集成。集成方法主要包括bagging和boosting两种方法,而AdaBoost算法是基于boosting思想的机器学习算法。2.boosting介绍boosting所使用的多个分类器类型都是一致的,根据被已有1分类器错分的那些数据...

taichitaichi的博客 4863

从零学习Adaboost算法的python实现

最近突然遇到个Adaboost算法实现增强LBP特征进行表情识别的论文,因为一些要求需要从头学习并整理一下,于是对Adaboost算法的进行了一些了解。又臭又长的理论和各种各样的论文这里就不贴了,记录一下学习心得。 Adaboost分类算法python代码详细实现 首先呢,Adaboost分类算法的实现网上找的基本都是二分类的代码,很少有基于多分类的代码实现,于是我就找了找基于多分类实现的方法,具...

qq_43232373的博客 2654

python中的adaboost分类器

In recent years, boosting algorithms got huge popularity in data science or machine learning competitions. Most of the winners of these competitions use boosting algorithms to achieve high accuracy. T...

weixin_26711425的博客 1634

机器学习Python实现AdaBoost

adaboost是boosting方法多个版本中最流行的一个版本,它是通过构建多个弱分类器,通过各个分类器的结果加权之后得到分类结果的。这里构建多个分类器的过程也是有讲究的,通过关注之前构建的分类器错分的那些数据而获得新的分类器。这样的多个分类器在训练时很容易得到收敛。 本文主要介绍了通过单层决策树构建弱分类器,同理,也可以用其他的分类算法构建弱分类器。 boost 算法系列的起源来自

xietingcandice的专栏 1万+

AdaBoost算法实例详解

AdaBoost算法其实很精炼,算法流程也好理解,但是看了算法的解释版本之后,什么前向分布算法,什么指数损失函数之后有点迷糊了。抛开这些理论性的推导不谈(其实是因为能力有限),通过例子直观的了解AdaBoost算法的计算过程。 简要叙述一下AdaBoost算法的主要过程: AdaBoost为每个数据样本分配权重,权重符合概率分布,初始权重符合均匀分布,串行训练M个模型,依据每轮训练的模型的错误率(被误分类样本的权重之和)确定当前模型在最终模型中的权重,以及更新训练样本的权重,误分类样本权重升高,分类正确

胖胖大海的博客 2万+

Adaboost算法的Python实现

机器学习七大经典算法中的Adaboost算法,使用Python实现

Iris_Adaboost.rar_Adaboost鸢尾花_adaboost python_iris python_pytho

python鸢尾花(iris)数据分类程序例子,采用adaboost算法。

python实现AdaBoost算法

★ AdaBoost的理解: 对于二分类而言,我们通过一个阈值threshVal将数据集划分为两种分类(正类和负类),而这个阈值就是我们所说的分割线,只不过它总是平行于坐标轴(因为我们取的基分类器是单层决策树): 对于上述数据集,一个基分类器即可将其分类,但是对于大多数训练集而言,一个基分类器是不足够的,比如: 在图3中,我们找...

weixin_42051109的博客 1万+

Spring Boot整合AWS S3文件上传实战:从配置到权限管理全流程解析

本文详细解析了Spring Boot整合AWS S3文件上传的全流程,包括基础配置、核心上传功能实现、高级权限控制及安全最佳实践。通过实战案例展示如何高效处理文件上传、大文件分片及权限管理,帮助开发者构建健壮的文件管理系统。特别强调AWS S3的高可用性和安全性,适用于企业级应用开发。

sam99的博客 283

Python3《机器学习实战》学习笔记(十):提升分类器性能利器-AdaBoost

前面的文章已经介绍了五种不同的分类器,它们各有优缺点。我们可以很自然地将不同的分类器组合起来,而这种组合结果则被成为集成方法(ensemble method)或者元算法(meta-algorithm)。使用集成方法时会有多种形式:可以是不同算法的集成,也可以是同一种算法在不同设置下的集成,还可以是数据集不同部分分配给不同分类器之后的集成。

Jack-Cui 2万+

DeepSeek与豆包无缝对接:5分钟搞定智能周报自动化(附完整代码)

本文详细介绍了如何利用DeepSeek与豆包API,快速搭建一个智能周报自动化系统。通过整合豆包平台的工作流数据,并调用DeepSeek大模型进行深度分析与内容生成,该系统能在5分钟内自动抓取、分析多源信息,并生成结构清晰、富有洞察力的团队周报,显著提升工作效率。

weixin_29029995的博客 494

鸿蒙进阶——HDI及IDL硬件接口IPC框架小结

HDI(Hardware Device Interface):OpenHarmony硬件设备接口,定义系统中跨进程通信的接口,实现服务间的跨进程通信

最美不过,心中有梦,身旁有你! 3908

AdaBoost算法原理及python实现(手动感叹号)

  AdaBoost是Boosting算法的一种,比较出名,它可以将多个弱分类器线性组合成一个强分类器,通俗的说就是“三个臭皮匠,顶个诸葛亮”。其要求弱分类器好而不同,每个分类器的准确率要在50%以上。  AdaBoos先初始化样本权值分布,并从初始训练集训练出一个基学习器,再根据这个基学习器的分类结果对训练样本的权值分布进行调整,再生成新的基学习器,依次进行下去,直到满足要求。......

weixin_44598249的博客 4601

超详细!新手必看STM32-DMA配置与实验(串口使用DMA发送数据)

DMA就是:直接存储器访问。DMA传输数据从一个地址空间复制到另一个地址空间,提供在外设和存储器或者存储器和存储器之间的高速数据传输。

qq_1033275663的博客 2万+

python 实现AdaBoost 算法

有用请点赞,没用请差评。 欢迎分享本文,转载请保留出处。 目前程序的训练部分分类器部分没有问题,但是最后的predict部分还存在点问题,一直没有找出来,等有时间了再来修改吧。 采用的数据集:github:https://github.com/Tomator01/-Machine-Learning # -*- coding:utf-8 -*- # AdaBoost算法...

Big_Pai的博客 1774

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4867

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1650

AdaBoost分类器

本博客是基于《机器学习实战》中第七章的基础上加上个人理解所做的笔记,其中python程序的注释也是个人的理解,可能有不正确的地方,仅供参考。 环境:win7 64位 python3.50、概述当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习处理问题时又何尝不是如此?这就是元算法(meta-algorithm ) 背后的思路。元算法是对其他算法进行组合的一种方式,即可以将

ggwcr的博客 8354

学 Simulink——基于递推最小二乘法(RLS)的工业电机转动惯量 J在线辨识仿真

Te 估算 = 1.5·p·(ψ·iq + (Ld-Lq)·id·iq)回归量:φ(k)=−ω˙(k), y(k)=Te​(k), θ=J。仿真:电机加速 0→1500rpm,观测 J^(k)→Jnom​。(可选) Jtrue​切 0.04(双惯量负载)→ 看跟踪。电机机械运动方程:Te​−TL​=J⋅ω˙+B⋅ω。J^(0)=0.005→收敛至0.02kg⋅m2✔。Te​:电磁转矩(Nm),已知(来自电流环输出)仅需 Te​,ω(驱动器已有)→ 无额外传感 ✔。

amy_mhd的博客 45

集成学习Adaboost算法及python实现及sklearn包的调用

集成方法(ensemble method)集成方法主要包括Bagging和Boosting两种方法。 bagging 基于数据重抽样的分类器构建方法 在Bagging方法中,主要通过对训练数据集进行随机采样,以重新组合成不同的数据集,新数据集和旧数据集大小相等,利用弱学习算法对不同的新数据集进行学习,得到一系列的预测结果,对这些预测结果做平均或者投票做出最终的预测。注:随机森林算法是基于Baggin

changzoe的博客 2万+

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 971

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从0开始实现一个Adaboost分类器(完整代码)

公众号后台回复“图书“,了解更多号主新书内容作者:luanhz来源:小数志导读日前,通俗易懂的推导了三种集成学习的原理及主要公式,今天本文基于Python从0开始手动实现一个Adab...

数据森麟 2127

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: (七)AdaBoost 简介
下一篇: (九)AdaBoost 中参数对于决策边界复杂度分析
coderpai
博客等级 码龄10年 1082粉丝 469原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值