BPNN是一种根据误差反向传播算法训练的多层前馈网络,具有很强的非线性处理能力,是目前应用最广泛的神经网络之一。但BPNN的泛化能力相对较差,在优化过程中易陷入局部极小值,同时,它的鲁棒性差,学习过程的收敛速度慢。基于以上缺点,各种优化算法被引入其中以优化BPNN的参数,并取得了不错的效果。
此外,Adaboost是一种迭代分类算法,其在同一训练集采用不同方法训练不同分类器(弱分类器),并根据弱分类器的误差分配不同权重,然后将这些弱分类器组合成一个更强的最终分类器(强分类器),并一直迭代,直到分类的错误率达到之前设定的阈值或者迭代次数达到设定最大迭代次数。因此,可以通过构建一个Adaboost模型,将多个BPNN作为弱分类器进行训练,使其相互补充,集成为具有较强鲁棒性的强分类器。下面将对该算法的理论及其MATLAB实现进行具体讲解。
00 目录
01 BPNN-Adaboost算法概述
02 代码目录
03 分类/回归性能对比
04 改进方向
01 BPNN-Adaboost算法概述
通过加权集成的Adaboost预测准确率高,泛化能力强,可以有效克服单个BPNN的缺点。因此本文将BPNN与 Adaboost 算法结合,将 BP NN作为弱分类器对样本进行反复训练,通过 AdaBoost 算法将BPNN弱分类器组成强分类器。分类与回归问题流程基本一致,主要流程如下:
数据选择与网络初始化
根据输入输出维度确定BPNN网络结构,初始化BPNN权值和阈值,并初始化m组训练数据集的分布权重Di:
式中Di为样本的初始权重,i=1,2,3,4,…,m;
弱分类器预测
训练第t个BPNN弱分类器时,对训练数据进行预测得到输出g(t)的预测误差和et:
其中,y为期望的分类结果。
计算预测序列权重
根据上一步得到的预测误差和𝑒𝑡计算预测序列 的权重𝛼𝑡:
调整权重Di
根据上一步得到的预测序列权重𝛼𝑡调整下一轮训练的权重:
式中,Bt是归一化因子,目的是使得权重无论怎么变,分布权重和都为1。
强分类器
在训练 T 轮之后,得到每一轮的弱分类器函数𝑓(𝑔(𝑡), 𝛼𝑡 ),然后将这些弱分类器组合成最终的强分类器ℎ(𝑥):
02 代码目录
代码包含回归与分类问题,其中分类问题目前为二分类,多分类问题将在后面的文章中解决,文件中包含一篇参考文献,部分关于BP-Aadaboost算法的引言参考了这篇文章。
考虑到很多同学获取代码后有乱码(matlab版本问题),可以将matlab版本改为2020或2021,或使用乱码解决文件夹中的txt文件即可。
部分代码如下:
完整代码见文末进行获取
03 分类/回归性能对比
分类:
回归:
由以上结果能够得出结论,通过Adaboost方法改进BPNN同样也能提升其性能。
04 改进方向
为实现对于传统BPNN算法性能的改进,本文通过Adaboost方法将BPNN作为弱分类器,多个弱分类器组合为强分类器以改进单个BPNN泛化能力弱、鲁棒性差等缺点。同时,还可以将优化算法应用其中优化BPNN的权值和阈值,进一步提升其性能,即利用优化算法优化的BPNN作为弱分类器,进而多个弱分类器能够组合迭代为更强健的强分类器,在后续文章中作者将介绍这种方法。
BP-Adaboost获取方式:
在作者公众号(KAU的云实验台)后台回复:
BP-Adaboost (最好直接复制关键词到后台发送)
另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。
如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),若有定制需求,可私信作者。