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

news2024/12/29 13:08:56

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

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

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

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

一、AdaBoost实战背景

我们先做个简单回忆,什么是分类,什么是回归呢?实际上分类和回归的本质是一样的,都是对未知事物做预测。不同之处在于输出结果的类型,分类输出的是一个离散值,因为物体的分类数有限的,而回归输出的是连续值,也就是在一个区间范围内任何取值都有可能。

这次我们的主要目标是使用 AdaBoost 预测房价,这是一个回归问题。除了对项目进行编码实战外,我希望你能掌握:

  1. AdaBoost 工具的使用,包括使用 AdaBoost 进行分类,以及回归分析。
  2. 使用其他的回归工具,比如决策树回归,对比 AdaBoost 回归和决策树回归的结果。

二、如何使用 AdaBoost 工具

我们可以直接在 sklearn 中使用 AdaBoost。如果我们要用 AdaBoost 进行分类,需要在使用前引用代码:

from sklearn.ensemble import AdaBoostClassifier

我们之前讲到过,如果你看到了 Classifier 这个类,一般都会对应着 Regressor 类。AdaBoost 也不例外,回归工具包的引用代码如下:

from sklearn.ensemble import AdaBoostRegressor

我们先看下如何在 sklearn 中创建 AdaBoost 分类器。

我们需要使用 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 回归呢?

我们可以使用 AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=‘linear’, random_state=None) 这个函数。

你能看出来回归和分类的参数基本是一致的,不同点在于回归算法里没有 algorithm 这个参数,但多了一个 loss 参数。

loss 代表损失函数的设置,一共有 3 种选择,分别为 linear、square 和 exponential,它们的含义分别是线性、平方和指数。默认是线性。一般采用线性就可以得到不错的效果。

创建好 AdaBoost 分类器或回归器之后,我们就可以输入训练集对它进行训练。我们使用 fit 函数,传入训练集中的样本特征值 train_X 和结果 train_y,模型会自动拟合。使用 predict 函数进行预测,传入测试集中的样本特征值 test_X,然后就可以得到预测结果。

三、如何用 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)
pred_y = regressor.predict(test_x)
mse = mean_squared_error(test_y, pred_y)
print("房价预测结果 ", pred_y)
print("均方误差 = ",round(mse,2))

运行结果:

房价预测结果  [20.2        10.4137931  14.63820225 17.80322581 24.58931298 21.25076923
 27.52222222 17.8372093  31.79642857 20.86428571 27.87431694 31.09142857
 12.81666667 24.13131313 12.81666667 24.58931298 17.80322581 17.66333333
 27.83       24.58931298 17.66333333 20.90823529 20.10555556 20.90823529
 28.20877193 20.10555556 21.16882129 24.58931298 13.27619048 31.09142857
 17.08095238 26.19217391  9.975      21.03404255 26.74583333 31.09142857
 25.83960396 11.859375   13.38235294 24.58931298 14.97931034 14.46699029
 30.12777778 17.66333333 26.19217391 20.10206186 17.70540541 18.45909091
 26.19217391 20.10555556 17.66333333 33.31025641 14.97931034 17.70540541
 24.64421053 20.90823529 25.83960396 17.08095238 24.58931298 21.43571429
 19.31617647 16.33733333 46.04888889 21.25076923 17.08095238 25.83960396
 24.64421053 11.81470588 17.80322581 27.63636364 23.59731183 17.94444444
 17.66333333 27.7253886  20.21465517 46.04888889 14.97931034  9.975
 17.08095238 24.13131313 21.03404255 13.4        11.859375   26.19214286
 21.25076923 21.03404255 47.11395349 16.33733333 43.21111111 31.65730337
 30.12777778 20.10555556 17.8372093  18.40833333 14.97931034 33.31025641
 24.58931298 22.88813559 18.27179487 17.80322581 14.63820225 21.16882129
 26.91538462 24.64421053 13.05       14.97931034  9.975      26.19217391
 12.81666667 26.19214286 49.46511628 13.27619048 17.70540541 25.83960396
 31.09142857 24.13131313 21.25076923 21.03404255 26.91538462 21.03404255
 21.16882129 17.8372093  12.81666667 21.03404255 21.03404255 17.08095238
 45.16666667]
均方误差 =  18.05

这个数据集是比较规范的,我们并不需要在数据清洗,数据规范化上花太多精力,代码编写起来比较简单。

同样,我们可以使用不同的回归分析模型分析这个数据集,比如使用决策树回归和 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))

运行结果:

决策树均方误差 =  23.84
KNN均方误差 =  27.87

你能看到相比之下,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 回归分析对波士顿房价进行了预测。因为这是个回归分析的问题,我们直接使用 sklearn 中的 AdaBoostRegressor 即可。如果是分类,我们使用 AdaBoostClassifier。

另外我们将 AdaBoost 分类器、弱分类器和决策树分类器做了对比,可以看出经过多个弱分类器组合形成的 AdaBoost 强分类器,准确率要明显高于决策树算法。所以 AdaBoost 的优势在于框架本身,它通过一种迭代机制让原本性能不强的分类器组合起来,形成一个强分类器。

其实在现实工作中,我们也能找到类似的案例。IBM 服务器追求的是单个服务器性能的强大,比如打造超级服务器。而 Google 在创建集群的时候,利用了很多 PC 级的服务器,将它们组成集群,整体性能远比一个超级服务器的性能强大。

再比如我们讲的“三个臭皮匠,顶个诸葛亮”,也就是 AdaBoost 的价值所在。

版权声明

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

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

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

相关文章

录音编辑软件推荐,让你的音频制作更上一层楼!

“有没有好用的录音编辑软件推荐呀?就是可以用来剪辑录音的,领导要求我们对基层工作人员进行访谈,需要录音,可是录制的声音杂音很多,听不清在讲什么,求大家推荐一个录音编辑软件,谢谢啦&#xf…

更新SQLite数据库数据

本文所有代码均存放于 https://github.com/MADMAX110/Starbuzz 之前了解了如何修改应用让它从SQLite数据库中提取数据,但是还没有用过更新过数据库数据。 这里要修改应用使用户能够记录哪些饮料是他们的最爱。为此要为DrinkActivity增加一个复选框; 如果…

iPhone苹果手机闹钟智能跳过节假日怎么设置?

国内绝大多数的手机用户使用的操作系统只有三个,安卓、鸿蒙和苹果的ios。而iPhone苹果手机的忠实用户是非常多的,所以日积月累中用户数量也就非常庞大,并且相当一部分用户都是上班族。而工作忙碌的上班族因为事情比较多,为了避免自…

前端笔试题总结,带答案和解析(持续更新,上次更新23/10/5,目前有30题)

前端笔试题总结,带答案和解析(持续更新,上次更新23/10/5,目前有30题) 这个系列将持续更新前端笔试题一期十题,每五题做一个标题(方便跳转),您可以一期一期阅读&#xff0…

SAP BAPI2017_GOODSMVT_CREATE 不支持 货物移动失败

SAP BAPI2017_GOODSMVT_CREATE 不支持 货物移动失败 可能的原因两种: 1.移动类型允许的事务代码不全 2.BAPI传值的移动类型有问题

Laya3.0 如何快速调试

点击play箭头 点击右边的开发者工具 就会弹出 chrome的调试窗口 然后定位到你自己的ts文件 直接在ts里断点即可 不需要js文件 如何自动生成代码? 比如你打开一个新项目 里面显示的是当前场景 只需要点击 UI运行时 右边的框就可以了 他会自动弹窗提示你 创建一个文…

百元内挂耳式耳机哪款好、百元挂耳式耳机推荐

开放式耳机采用挂耳式设计,佩戴不需要堵住耳道,这种创新的设计不仅可以享受音乐,还保留了外界环境的听觉感知能力,让我们在户外运动、通勤或进行其他活动时更加安全,预算不多,百元价位范围内,我…

Spring:处理@Autowired和@Value注解的BeanPostProcessor

AutowiredAnnotationBeanPostProcessor,它实现了MergedBeanDefinitionPostProcessor,因此会调用postProcessMergedBeanDefinition方法。 它实现了InstantiationAwareBeanPostProcessor,因此在属性注入时会调用postProcessPropertyValues方法 如果Autowired注解按类型找到了大…

微信如何防止被限制?一文了解原因和处理方法

微信引流频繁被限制加好友,是许多人在营销过程中遇到的一大难题。为了解决这一问题,我们需要先了解微信官方对好友添加的限制和政策。只有明确了这些规定,才能更有效地进行微信引流,提高营销效果。 为什么被限制? 为了…

为什么企业都在申报“高新技术”?有以下十大好处!

随着信息技术时代的迅速发展,很多企业为了能够在同行中脱颖而出,都会选择办理一些和企业相关的资质证书,以便提升企业的核心竞争力,今天同邦信息科技的小编就告诉大家为什么那么多企业都选择申报“高新技术”企业? 首先…

智慧用电安全云监控系统

近年来,我国电气火灾频发,2017年至2019年,我国共之间发生发展电气控制火灾31.1万起,占全国进行火灾总量及伤亡风险损失的30%以上,2019年全年共接报火灾23.3万起,电气火灾11.1万,占52…

Doris 2.0.1 DockerFile版 升级实战

1、Doris 2.0.1 DockerFile 的制作 参考 Doris 2.0.1 Dockerfile制作-CSDN博客 2、之前的Doris 集群通过 Docker容器进行的部署,需提前准备好Doris2.0.1的镜像包 参考: 集群升级 - Apache Doris Doris 升级请遵守不要跨两个及以上关键节点版本升级的…

数字化转型频频失败?一体化模式提供新的思考

数字化连续6年出现在政府报告中,从《中小企业数字化赋能专项行动方案》到《关于推进“上云用数赋智”行动》、《“十四五” 规划和 2035 年远景目标建议》、《中小企业数字化转型指南》,再到2023年2月《数字中国建设整体布局规划》,加快数字化…

新基建智慧铁路:高铁沿线综合视频监控及风险智能预警管理方案

一 、方案背景 铁路沿线安全环境直接关系铁路运输安全畅通。随着我国铁路特别是高速铁路运营里程不断增加,改善铁路沿线安全环境对保障铁路高质量发展和人民群众生命财产安全的作用更加突出。为了保障高铁的安全运营,高铁对安防尤其是视频监控的需求不断…

【转载】vscode配置numpy环境,实测有效

1.首先找到python.exe文件的位置 查看python.exe文件在哪的方法: 1、在vscode中执行下面的程序即可直接输出python.exe文件的路径 import sys sys.executable 输出结果如下: 2、新建终端 然后输入下列进行跳转 cd C:\Users\胡萝卜超爱兔子\AppData\Lo…

【EI会议征稿】第三届公共管理与大数据分析国际学术会议 (PMBDA 2023)

第三届公共管理与大数据分析国际学术会议 (PMBDA 2023) 2023 3rd International Conference on Public Management and Big Data Analysis 第三届公共管理与大数据分析国际学术会议 (PMBDA 2023)将于2023年12月15-17日在中国南京…

c#访问sql server数据库登录失败

以下配置适用于如下情况:已经能连接数据库的server,而且用户名、密码都对,但通过c#访问数据库时出错,提示login、管道相关的错误。通过一些配置,最终解决了该问题,遇到该问题的小伙伴也可以按照同样配置尝试…

如何将AI智能分析与视频监控平台EasyCVR相融合构建监狱安防体系

当前大多数监狱的视频监控系统安防设施普遍落后,存在设备无法正常会用、画面不清晰、网络故障等问题,加上传统人工巡检方式落后,人工需求量大、信息化程度较低,监狱监控系统亟需改革。 改革方案 1、视频监控系统 通过在监狱内部…

PyTorch - 大模型多卡训练 “CUDA error: an illegal memory access was encountered”

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/133640212 错误日志: # ...File "lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 580, in fi…

来看看老旧物件这样与现代空间结合完美结合

室内设计最重要的是平衡,但要在家居装饰中达到这一完美境界却很困难,尤其是在现代家居中融入老旧物件的时候。 1. 将老旧物件作为装饰品 由于老旧风格的本质,它们在现代和当代潮流中彰显个性。采用简约的方式,通过简单的装饰和少…