基于Adaboot算法与神经网络的Python实现

本文介绍了Adaboost算法的工作原理及其在机器学习中的应用场景,特别是当单个模型表现不稳定时,如何利用Adaboost提升模型性能。通过Python代码展示了Adaboost算法的实现,包括不依赖sklearn包的自定义实现和使用sklearn库的AdaBoostClassifier,并分析了关键参数对模型的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、应用场景

在使用机器学习建模中,往往会遇到这样的一种场景,给定一批数据,建立的模型不论你怎么调参,验证集在该模型上的表现能力较差,且每次得到的结果也不稳定,出现这样的原因在于你的数据本身可能存在一定问题(预处理),第二就是超参数没调整好,这时就可以考虑采用提升学习算法,提升方法的基本思想是:对于一个复杂的任务来说,将多个专家(模型)的判断适当的综合所得出的判断,要比一个专家单独判断好,实际上就是“三个臭皮匠顶一个诸葛亮”的道理。

二、Adaboost 介绍

AdaBoost算法属于一种迭代算法,它的核心思想是针对同一训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强大的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。与随机森林相似。

AdaBoost是属于boosting中的一种算法。bagging和boosting是两种集成方法,在bagging中是通过随机取样的方法从原数据中得到与原数据规模一样的数据集来获取弱分类器;boosting更进一步,它在数据集上顺序应用了多个不同分类器,如前面说的利用上一个弱分类器的准确率和权重来调整数据,获得下一个分类器。

所以AdaBoost的原理也比较简单,就是通过一些手段获得多个弱分类器,将它们集成起来构成强分类器,综合所有分类器的预测得出最终的结果。这里的弱分类器可以使用任意的分类器如:K-NN分类器、朴素贝叶斯分类器、决策树分类器、logistic回归分类器等等,作为弱分类器,简单分类器的效果更好。在下面的代码中使用的就是单层决策树作为弱分类器。

三、AdaBoost 算法描述

输入:训练集T=(x1,y1),(x2,y2),...,(xn,yn)T=(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n})T=(x1,y1),(x2,y2),...,(xn,yn),y=−1,1y={-1,1}y=1,1
输出:最终分类器G(x)G(x)G(x)
(1)初始化权值分布
D1=(w11,w12,...,w1N)D_{1}=(w_{11},w_{12},...,w_{1N})D1=(w11,w12,...,w1N),w1i=1/Nw_{1i}=1/Nw1i=1/N,i=1,2,...,Ni =1,2,...,Ni=1,2,...,N

(2)对m=1,2,...,Mm = 1,2,...,Mm=1,2,...,M
(aaa)使用具有权重分布的DmD_{m}Dm训练数据集学习,得到基本分类器
Gm(x)→[−1,+1]G_{m}(x)\to{[-1,+1]}Gm(x)[1,+1]
(bbb)计算Gm(x)G_{m}(x)Gm(x)在训练集上的分类误差
em=P(Gm(xi)≠yi)=∑i=1NwiI(Gm(xi)≠yi)e_{m}=P(G_{m}(x_{i}) \neq y_{i})=\sum_{i=1}^Nw_{i}I(G_{m}(x_{i}) \neq y_{i})e

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值