AdaBoost提升分类器性能

目录

AdaBoost算法原理

AdaBoost工作详情

初始权重分配

第一轮

第二轮

后续轮次

最终模型

AdaBoost的API解释

AdaBoost 对房价进行预测

AdaBoost 与决策树模型的比较

结论


AdaBoost算法原理

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

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

Boosting 算法的原理

AdaBoost 的关键在于它会给训练数据中的每个样本分配一个权重,并在每一轮迭代中调整这些权重。错误分类的样本在下一轮迭代中会得到更高的权重,从而使弱分类器集中注意力于难以分类的样本。以下是一个具体的示例来解释 AdaBoost 算法的原理:

AdaBoost工作详情

假设我们有一个简单的二分类问题,训练数据集包含5个样本:{x1, x2, x3, x4, x5},它们的真实标签分别为 {1, -1, 1, 1, -1}

初始权重分配

首先,每个样本都被赋予相同的权重,即 1/5

第一轮

  1. 训练第一个弱分类器:例如,一个简单的决策树。
  2. 计算错误率:弱分类器在加权训练数据上的错误率。例如,假设它错误地分类了样本 x2x5
  3. 更新样本权重:增加被错误分类的样本的权重,减少正确分类的样本的权重。例如,x2x5 的权重增加,而其余样本的权重减少。
  4. 计算分类器权重:基于错误率计算分类器权重,错误率越低的分类器在最终模型中的权重越高。
分类器权重的计算公式

第二轮

  1. 训练第二个弱分类器:使用更新后的样本权重。
  2. 重复计算错误率、更新样本权重和分类器权重的过程。

后续轮次

重复以上步骤,直到达到预定的迭代次数,或者达到某个性能阈值。

最终模型

最终的 AdaBoost 模型是所有弱分类器的加权组合,其中每个弱分类器的贡献由其权重决定。这样,模型在预测新数据时,会考虑所有弱分类器的预测并加权得到最终结果。

AdaBoost的API解释

AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)

这个函数,其中有几 个比较主要的参数,我分别来讲解下:

1. base_estimator:代表的是弱分类器。在 AdaBoost 的分类器和回归器中都有这个参数, 在 AdaBoost 中默认使用的是决策树,一般我们不需要修改这个参数,当然你也可以指定 具体的分类器。

2.   n_estimators:算法的最大迭代次数,也是分类器的个数,每一次迭代都会引入一个新的 弱分类器来增加原有的分类器的组合能力。默认是 50。

3.   learning_rate:代表学习率,取值在 0-1 之间,默认是 1.0。如果学习率较小,就需要比 较多的迭代次数才能收敛,也就是说学习率和迭代次数是有相关性的。当你调整 learning_rate 的时候,往往也需要调整 n_estimators 这个参数。

4.   algorithm:代表我们要采用哪种 boosting 算法,一共有两种选择:SAMME 和 SAMME.R。默认是 SAMME.R。这两者之间的区别在于对弱分类权重的计算方式不同。

5.   random_state:代表随机数种子的设置,默认是 None。随机种子是用来控制随机模式 的,当随机种子取了一个值,也就确定了一种随机规则,其他人取这个值可以得到同样的结果。如果不设置随机种子,每次得到的随机数也就不同

AdaBoost 对房价进行预测

了解了 AdaBoost 工具包之后,我们看下 sklearn 中自带的波士顿房价数据集。这个数据集一共包括了 506 条房屋信息数据,每一条数据都包括了 13 个指标,以及一个房屋 价位。13 个指标的含义,可以参考下面的表格

这些指标分析得还是挺细的,但实际上,我们不用关心具体的含义,要做的就是如何通过这 13 个指标推导出最终的房价结果。
 
首先加载数据,将数据分割成训练集和测试集,然后创建 AdaBoost 回归模型,传入训练集 数据进行拟合,再传入测试集数据进行预测,就可以得到预测结果。最后将预测的结果与实际 结果进行对比,得到两者之间的误差。具体代码如下:

from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error from sklearn.datasets import load_boston
from sklearn.ensemble import AdaBoostRegressor
# 加载数据
data=load_boston()
# 分割数据
train_x, test_x, train_y, test_y = train_test_split(data.data, data.target, test_size=0.25, random_state=33)
# 使用AdaBoost回归模型
regressor=AdaBoostRegressor()regressor.fit(train_x,train_y) 12 
pred_y = regressor.predict(test_x)mse = mean_squared_error(test_y, pred_y)
print("房价预测结果  ", pred_y) 15 
print("均方误差  = ",round(mse,2))
运行结果

同样,我们可以使用不同的回归分析模型分析这个数据集,比如使用决策树回归和 KNN 回归。
编写代码如下:

# 使用决策树回归模型
dec_regressor=DecisionTreeRegressor() dec_regressor.fit(train_x,train_y) 
pred_y = dec_regressor.predict(test_x) mse = mean_squared_error(test_y, pred_y)
print("决策树均方误差 = ",round(mse,2))# 使用KNN回归模型
knn_regressor=KNeighborsRegressor()
knn_regressor.fit(train_x,train_y) 
pred_y = knn_regressor.predict(test_x) 
mse = mean_squared_error(test_y, pred_y)
print("KNN均方误差  = ",round(mse,2))
运行结果

你能看到相比之下,AdaBoost 的均方误差更小,也就是结果更优。虽然 AdaBoost 使用了弱 分类器,但是通过 50 个甚至更多的弱分类器组合起来而形成的强分类器,在很多情况下结果 都优于其他算法。因此 AdaBoost 也是常用的分类和回归算法之一 

AdaBoost 与决策树模型的比较

在 sklearn 中 AdaBoost 默认采用的是决策树模型,我们可以随机生成一些数据,然后对比 下 AdaBoost 中的弱分类器(也就是决策树弱分类器)、决策树分类器和 AdaBoost 模型在 分类准确率上的表现。

如果想要随机生成数据,我们可以使用 sklearn 中的 make_hastie_10_2 函数生成二分类数 据。假设我们生成 12000 个数据,取前 2000 个作为测试集,其余作为训练集。有了数据和训练模型后,我们就可以编写代码。我设置了 AdaBoost 的迭代次数为 200,代 表 AdaBoost 由 200 个弱分类器组成。针对训练集,我们用三种模型分别进行训练,然后用测试集进行预测,并将三个分类器的错误率进行可视化对比,可以看到这三者之间的区别:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.metrics import zero_one_loss
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import  AdaBoostClassifier
# 设置AdaBoost迭代次数
n_estimators=200
# 使用
X,y=datasets.make_hastie_10_2(n_samples=12000,random_state=1)
# 从12000个数据中取前2000行作为测试集,其余作为训练集
train_x, train_y = X[2000:],y[2000:]
test_x, test_y = X[:2000],y[:2000]
# 弱分类器
dt_stump = DecisionTreeClassifier(max_depth=1,min_samples_leaf=1)
dt_stump.fit(train_x, train_y)
dt_stump_err = 1.0-dt_stump.score(test_x, test_y)
# 决策树分类器
dt = DecisionTreeClassifier()
dt.fit(train_x,  train_y)
dt_err = 1.0-dt.score(test_x, test_y)
# AdaBoost分类器
ada = AdaBoostClassifier(base_estimator=dt_stump,n_estimators=n_estimators)
ada.fit(train_x,  train_y)
# 三个分类器的错误率可视化
fig = plt.figure()
# 设置plt正确显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
ax = fig.add_subplot(111)
ax.plot([1,n_estimators],[dt_stump_err]*2, 'k-', label=u'决策树弱分类器 错误率')
ax.plot([1,n_estimators],[dt_err]*2,'k--', label=u'决策树模型 错误率')
ada_err = np.zeros((n_estimators,))
# 遍历每次迭代的结果 i为迭代次数, pred_y为预测结果
for i,pred_y in enumerate(ada.staged_predict(test_x)):# 统计错误率ada_err[i]=zero_one_loss(pred_y, test_y)
# 绘制每次迭代的AdaBoost错误率
ax.plot(np.arange(n_estimators)+1, ada_err, label='AdaBoost Test 错误率', color='orange')
ax.set_xlabel('迭代次数')
ax.set_ylabel('错误率')
leg=ax.legend(loc='upper right',fancybox=True)
plt.show()
运行结果

从图中你能看出来,弱分类器的错误率最高,只比随机分类结果略好,准确率稍微大于 50%。决策树模型的错误率明显要低很多。而 AdaBoost 模型在迭代次数超过 25 次之后,错 误率有了明显下降,经过 125 次迭代之后错误率的变化形势趋于平缓。

因此我们能看出,虽然单独的一个决策树弱分类器效果不好,但是多个决策树弱分类器组合起来形成的AdaBoost 分类器,分类效果要好于决策树模型。

结论

AdaBoost 算法有效地集中于那些难以正确分类的样本,逐渐调整分类器以解决这些难题。这使得 AdaBoost 成为一种强大的集成方法,尤其适用于处理复杂的分类问题。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XC2303 PFM 升压 DC-DC 变换器 SOT23-3封装 体积小 外围简单 适合小电流产品

XC2303系列产品是一种高效率、低纹波、工作频率高的 PFM 升压 DC-DC 变换器。XC2303系列产品仅需要四个元器,就可完成将低输入的电池电压变换升压到所需的工作电压,非常适合于便携式1~4 节普通电池应用的场合。 电路采用了高性能、低功耗的参考电压电路结构&#xf…

【机器学习 | 白噪声检验】检验模型学习成果 检验平稳性最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

上市公司常见的印章问题契约锁如何帮您解决?

您知道公司印章的管理和使用是否存在问题?公司内部该如何通过印章问题自查,及时进行风险防治? 印章是上市公司权利的象征,开展“印章管理审查”确保管理和使用合规,也是上市公司内控和监管的一项重要内容。如果存在不合…

宣传技能培训1——《新闻摄影技巧》光影魔法:理解不同光线、角度、构图的摄影效果,以及相机实战操作 + 新闻摄影实例讲解

新闻摄影技巧 写在最前面摘要 构图与拍摄角度景别人物表情与叙事远景与特写 构图与拍摄角度案例 主体、陪体、前景、背景强调主体利用前景和背景层次感的创造 探索新闻摄影中的构图技巧基本构图技巧构图技巧的应用实例实例分析1. 黄金分割和九宫格2. 三角型构图3. 引导线构图4.…

Python基础【一】--入门知识[2023.11.22]

1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名。 Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 2 关键字 上面表中是 Python 中的关键字(保留字),我们在自定…

FFmpeg常用命令讲解及实战二

文章目录 前言一、ffmpeg 常用命令1、ffmpeg 的封装转换2、ffmpeg 的编转码3、ffmpeg 的基本编转码原理 二、ffprobe 常用参数1、show_format2、show_frames3、show_streams4、print_format5、select_streams 三、ffplay 的常用命令1、ffplay 常用参数2、ffplay 高级参数3、ffp…

广告机/商业显示屏_基于MT8788安卓主板方案

安卓主板在广告机领域扮演着重要的角色。无论是在商场、车站、酒店、电梯、机场还是高铁站,LED广告机广泛应用,并通过不同方式进行播放和管理。 广告机/商业显示屏_基于MT8788安卓主板方案 基于MT8788安卓主板方案的广告机采用了联发科MT8788八核芯片方案…

temu、亚马逊卖家利用自养号测评提升店铺排名,获取流量与销量

随着跨境电商的迅猛发展,越来越多的卖家涌入这个竞争激烈的市场。为了在跨境平台上取得突出的业绩,卖家们需要运用有效的运营策略并结合测评自养号来提升店铺的曝光度和销售业绩。 测评在跨境电商中扮演着重要的角色,卖家们了解到测评可以快…

旅行商问题(枚举,回溯,动态规划,贪心,分支界限)

文章目录 问题描述暴力枚举回溯法动态规划法贪心法分支界限法 问题描述 假设有一个货郎担要拜访n个城市,他必须选择所要走的路程,路程的限制时每个城市只能拜访一次,而且最后要走到原来出发的城市,要求路径长度。 旅行商问题将要…

Spring配置其他注解Spring注解的解析原理

Spring配置其他注解 Primary注解用于标注相同类型的Bean优先被使用权,Primary是Spring 3.0引入的,与Component和Bean一起使用,标注该Bean的优先级更高,则在通过类型获取Bean或通过Autowired根据类型进行注入时,会选用优…

【Python】np.unique() 介绍与使用

简述 numpy.unique:用于去除数组中重复元素,并从小到大排序(找到唯一元素并排序)。 def unique(ar, return_indexFalse, return_inverseFalse,return_countsFalse, axisNone):ar: 这是输入的数组或类数组对象。return_index: 如…

红队攻防实战之内网穿透隐秘隧道搭建

别低头,皇冠会掉;别流泪,贱人会笑。 本文首发于先知社区,原创作者即是本人 0x00 前言 构建内网隐蔽通道,从而突破各种安全策略限制,实现对目标服务器的完美控制。 当我们从外网成功获得攻击点的时候&…