EI论文程序:Adaboost-BP神经网络的回归预测算法,可作为深度学习对比预测模型,丰富实验内容,自带数据集,直接运行!

2023/11/30 9:48:33

适用平台:Matlab 2021及以上

本程序参考中文EI期刊《基于Adaboost的BP神经网络改进算法在短期风速预测中的应用》,程序注释清晰,干货满满,下面对文章和程序做简要介绍。

为了提高短期风速预测的准确性,论文提出了使用Adaboost算法来增强BP神经网络算法的方法。Adaboost算法是一种强大的学习算法,它通过组合弱学习器来提高整体预测能力。论文通过示例分析展示了Adaboost-BP神经网络方法在1到2小时风速预测中相比其他算法:ARMA、BP等具有更高的准确性,并强调了该方法在工程应用上的价值。

Adaboost-BP是一种集成学习方法,结合了Adaboost和BP(Back Propagation)神经网络的原理。Adaboost是一种Boosting算法,它通过集成多个弱预测器(通常是简单的学习器),以提高整体模型的性能。BP神经网络是一种常见的人工神经网络,用于模拟和学习复杂的非线性关系。

以下是Adaboost-BP的原理:

Adaboost原理:

Adaboost的核心思想是通过迭代训练一系列弱预测器,并赋予每个预测器一个权重,以调整其在最终模型中的贡献。

在每次迭代中,Adaboost调整训练样本的权重,使之前分类错误的样本在下一轮得到更多关注。

最终,所有弱预测器的预测结果通过加权求和得到最终模型的输出。

BP神经网络原理:

BP神经网络是一种前馈神经网络,它由输入层、隐藏层(可以有多层)、输出层组成。

神经网络通过前向传播计算输出,然后通过反向传播调整权重,以最小化预测误差。

反向传播使用梯度下降法更新权重,通过计算损失函数对权重的偏导数来确定梯度方向。

Adaboost-BP的结合:

在Adaboost-BP中,每个迭代中使用一个BP神经网络作为弱预测器。

初始时,所有样本的权重相等。

在每轮训练中,使用当前样本权重训练BP神经网络,并根据网络的性能(预测准确度)调整权重。

训练完一个BP神经网络后,计算其在整体模型中的权重,然后更新样本权重,以便下一轮训练中更关注之前预测精度低的样本。

重复这个过程直到达到预定的迭代次数或模型性能满足要求。

最终模型的预测:

最终模型是所有弱预测器的加权组合,每个弱预测器的权重由其在训练过程中的性能确定。

预测时,通过对每个弱预测器的预测结果进行加权求和,得到最终的模型输出。

Adaboost-BP的优点在于它结合了Adaboost和神经网络的优势,能够更好地处理复杂的非线性关系,提高模型的泛化能力。然而,也需要注意到该方法在训练过程中可能会更加复杂和耗时。

程序输出结果:

Adaboost-BP部分代码

%% Adaboost-BP预测
K=10;
for i=1:K
    
    %弱预测器训练
    net=newff(inputn,outputn,5);
    net.trainParam.epochs=20;
    net.trainParam.lr=0.1;
    net=train(net,inputn,outputn);
    
    %弱预测器预测
    an1=sim(net,inputn);
    T_sim1=mapminmax('reverse',an1,outputps);
    
    %预测误差
    erroryc(i,:)=T_train-T_sim1;

    %测试数据预测
    inputn1=mapminmax('apply',P_test ,inputps);
    an2=sim(net,inputn1);
    test_simu(i,:)=mapminmax('reverse',an2,outputps);% 各个弱预测器预测结果
    
    %调整D值
    Error(i)=0;
    for j=1:nn
        if abs(erroryc(i,j))>0.2  %较大误差
            Error(i)=Error(i)+D(i,j);
            D(i+1,j)=D(i,j)*1.1;
        else
            D(i+1,j)=D(i,j);
        end
    end
    
    %计算弱预测器权重
    at(i)=0.5/exp(abs(Error(i)));
    
    %D值归一化
    D(i+1,:)=D(i+1,:)/sum(D(i+1,:));
end

%% 强预测器预测
at=at/sum(at);

%% 强学习器学习预测结果
T_sim2=at*test_simu;

%%  计算各项误差参数 
error = T_sim2-T_test;               % 测试值和真实值的误差  
[~,len]=size(T_test);                % len获取测试样本个数,数值等于testNum,用于求各指标平均值
SSE1=sum(error.^2);                  % 误差平方和
MAE1=sum(abs(error))/len;            % 平均绝对误差
MSE1=error*error'/len;               % 均方误差
RMSE1=MSE1^(1/2);                    % 均方根误差
MAPE1=mean(abs(error./T_test));      % 平均百分比误差
r=corrcoef(T_test,T_sim2);           % corrcoef计算相关系数矩阵,包括自相关和互相关系数
R1=r(1,2);    

%%  绘图
figure
subplot(2, 1, 1)
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['MAPE=' num2str(MAPE1)]};
title(string)
xlim([1, M])
grid

subplot(2, 1, 2)
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['MAPE=' num2str(MAPE1)]};
title(string)
xlim([1, N])
grid

部分图片来源于网络,侵权联系删除!

欢迎感兴趣的小伙伴关注下方公众号获得完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码!


http://www.jnnr.cn/a/1081979.html

相关文章

队列的实现和OJ练习

目录 概念 队列的实现 利用结构体存放队列结构 为什么单链表不使用这种方法? 初始化队列 小提示: 队尾入队列 队头出队列 获取队头元素 获取队尾元素 获取队列中有效元素个数 检测队列是否为空 销毁队列 最终代码 循环队列 队列的OJ题 …

十. Linux关机重启命令与Vim编辑的使用

关机重启命令 shutdown命令 其他关机命令 其他重启命令 系统运行级别 系统默认运行级别与查询 退出登录命令logout 文本编辑器Vim Vim简介 没有菜单,只有命令Vim工作模式 Vim常用命令 插入命令 定位命令 删除命令 复制和剪切命令 替换和取消命令 搜索和搜索替换命令 保存和退出…

微机原理_14

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。) 1,下面寻址方式的操作数不在存储器中的是() A. 堆栈寻址 B. 寄存器间址 C.寄存器寻址 D. 直接寻址 2,条件转移指令JNE的条件是() A. CF…

【每日刷题——语音信号篇】

思考与练习 练习2.1 语音信号在产生的过程中,以及被感知的过程中,分别要经过人体的哪些器官? 1.产生过程: 肺部空气 → \rightarrow →冲击声带 → \rightarrow →通过声道(可以调节) → \rightarrow →…

【洛谷 P3743】kotori的设备 题解(二分答案+循环)

kotori的设备 题目背景 kotori 有 n n n 个可同时使用的设备。 题目描述 第 i i i 个设备每秒消耗 a i a_i ai​ 个单位能量。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。也就是说,对于任意实数,…

ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题

今天给大家安利一套现代 CSS 的教程,以前写网页的问题,现在都可以用新的写法来解决了。 ModernCSS.dev 是一个现代 CSS 语法的教程,讲解新的 CSS 语法如何解决一些传统问题,一共有30多课。 这套教程的作者是 Stephanie Eckles&am…

人工智能给我们的生活带来了巨大的影响?

1. 人工智能从哪些方面给我们带来了影响? 人工智能出现,极大地影响了人类的生活,下面是人工智能所影响的领域: 1. 日常生活 智能家居: AI驱动的设备,如智能扬声器、灯光、恒温器,正在改变我们与家居环境的…

基于AVR单片机的便携式心电监测设备设计与实现

基于AVR单片机的便携式心电监测设备是一种常用的医疗设备,用于随时监测和记录人体的心电信号。本文将介绍便携式心电监测设备的设计原理和实现步骤,并提供相应的代码示例。 1. 设计概述 便携式心电监测设备是一种小巧、方便携带的设备,能够…

基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码

基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于水基湍流优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Linux内核的安装

1.通过tftp 加载内核和根文件系统 即sd内存卡启动: SD卡的存储以扇区为单位,每个扇区的大小为512Byte, 其中零扇区存储分区表(即分区信息),后续的扇区可自行分区和格式化; 若选择SD卡启动,处理器上电后从第一个扇区开…

【C++上层应用】2. 预处理器

文章目录 【 1. #define 预处理 】【 2. #ifdef、#if 条件编译 】2.1 #ifdef2.2 #if2.3 实例 【 3. # 和 ## 预处理 】3.1 # 替换预处理3.2 ## 连接预处理 【 4. 预定义宏 】 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是…

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后,cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功(有版本号就行了) 2、选择npm镜像(npm config set registry https://registry.npm.taobao.org&…

AIGC ChatGPT4对Gbase数据库进行总结

ChatGPT4 用一个Prompt完成Gbase数据库的总结。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战, ETL Informatica 数据仓库案例实战 Excel 2021实操 …

【CHI】Ordering保序

本节介绍CHI协议所包含的支持系统保序需求的机制,包括: • Multi-copy atomicity • Completion response and ordering • Completion acknowledgment • Transaction ordering 一、 Multi-copy atomicity CHI协议中所使用的memory model要求为mu…

ClickHouse的 MaterializeMySQL引擎

1 概述 MySQL 的用户群体很大,为了能够增强数据的实时性,很多解决方案会利用 binlog 将数据写入到 ClickHouse。为了能够监听 binlog 事件,我们需要用到类似 canal 这样的第三方中间件,这无疑增加了系统的复杂度。 ClickHouse 20.…

11.16~11.19绘制图表,导入EXCEL中数据,进行拟合

这个错误通常是由于传递给curve_fit函数的数据类型不正确引起的。根据你提供的代码和错误信息,有几个可能的原因: 数据类型错误:请确保ce_data、lg_data和product_data是NumPy数组或类似的可迭代对象,且其元素的数据类型为浮点数。…

【grafana | clickhouse】实现展示多折线图

说明: 采用的是 Visualizations 的 Time series,使用的 clickhouse 数据源 在工作中遇到了一个需求,写好了代码,需要在grafana上展示在一个项目中所有人的,随时间的代码提交量变化图 目前遇到的问题:展示…

使用树莓派学习Linux系统编程的 --- 库编程(面试重点)

在之前的Linux系统编程中,学习了文件的打开;关闭;读写;进程;线程等概念.... 本节补充“Linux库概念 & 相关编程”,这是一个面试的重点! 分文件编程 在之前的学习中,面对较大的…

音视频同步笔记 - 以音频时间为基

音视频同步 - 以音频时间为基 上图介绍: 该图是以音频的时间为基,对视频播放时间的延迟控制方案,只调整视频的播放延时。delayTime是视频播放的延迟时间,初始值是1 / FPS * 1000 (ms),如果FPS为25帧率,初始…

Linux进程通信——IPC、管道、FIFO的引入

进程间的通信——IPC 进程间通信 (IPC,InterProcess Communication) 是指在不同进程之间传播或交换信息。 IPC的方式通常有管道 (包括无名管道和命名管道) 、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 …
最新文章