首页 > 其他分享 >BP神经网络时序预测——预测未来(含完整代码)

BP神经网络时序预测——预测未来(含完整代码)

时间:2024-10-24 12:16:15浏览次数:7  
标签:预测 归一化 HiddenOut 神经网络 BP W2 trainNum 权值

一、前言

随着数据科学的快速发展,利用神经网络进行时序预测已经成为一个热门话题。BP(反向传播)神经网络因其强大的学习能力,广泛应用于各类预测任务。本文将介绍一套基于Matlab的BP神经网络时序预测代码,重点在于如何通过历史数据预测未来趋势。本文中的代码是完整可用的,读者只需复制到Matlab中即可运行。

Bp神经网络完整代码

二、代码部分

代码分为以下几个部分:初始化、数据读取、数据归一化、权值和阈值初始化、模型训练、预测以及作图。

1. 初始化

%% 1.初始化

clear

close all

clc

 

2. 数据读取

需要修改以下部分:

 

1.数据范围,例如A1:A16表示16年的数据。

2.延时算子,例如k+4中的4表示使用的历史数据点数。

 

%% 2.数据读取

data0 = xlsread('数据.xlsx', 'Sheet1', 'A1:A16');

b = data0(:, 1)';

data = cell2mat(arrayfun(@(k) b(k:k+4), 1:12, 'un', 0)'); % 转换矩阵

[rowLen, colLen] = size(data);

trainNum = rowLen; % 训练样本数量

hiddenNum = 10; % 隐含层神经元数量

input = colLen - 1; % 输入层神经元数量

output = 1; % 输出层神经元数量

p = data(:, 1:input)'; % 输入数据矩阵

t = data(:, colLen)'; % 目标数据矩阵

 

3. 数据归一化

使用mapminmax进行数据归一化,以提高训练效果。

%% 3.数据归一化

[SamIn, PSp] = mapminmax(p, -1, 1);   

[tn, PSt] = mapminmax(t, -1, 1);

SamOut = tn; % 输出样本

MaxEpochs = 30000; % 最大训练次数

lr = 0.05; % 学习率

E0 = 1e-3; % 目标误差

rng('default');

 

4. 权值和阈值初始化

初始化权值和阈值,并设置训练循环。

%% 4.权值和阈值初始化

W1 = rand(hiddenNum, input); % 输入层与隐含层之间的权值

B1 = rand(hiddenNum, 1); % 隐含层偏置

W2 = rand(output, hiddenNum); % 隐含层与输出层之间的权值              

B2 = rand(output, 1); % 输出层偏置

ErrHistory = zeros(MaxEpochs, 1); 

 

for i = 1 : MaxEpochs   

    HiddenOut = logsig(W1 * SamIn + repmat(B1, 1, trainNum)); % 隐含层输出

    NetworkOut = W2 * HiddenOut + repmat(B2, 1, trainNum); % 输出层输出

    Error = SamOut - NetworkOut; % 计算误差

    SSE = sumsqr(Error); % 误差平方和

    ErrHistory(i) = SSE; % 记录误差

 

    if SSE < E0 % 达到误差阈值退出

        break;

    end

 

    % 计算权值更新

    Delta2 = Error;

    Delta1 = W2' * Delta2 .* HiddenOut .* (1 - HiddenOut);    

    dW2 = Delta2 * HiddenOut';

    dB2 = Delta2 * ones(trainNum, 1); 

    dW1 = Delta1 * SamIn';

    dB1 = Delta1 * ones(trainNum, 1);

 

    % 更新权值和阈值

    W2 = W2 + lr * dW2;

    B2 = B2 + lr * dB2;

    W1 = W1 + lr * dW1;

    B1 = B1 + lr * dB1;

end

 

5. 预测

在此部分,设置未来数据的预测。

%% 5.预测

x = 1 : 12; % 样本数

ForcastSamNum = 1;

preP = zeros(1, 4);

pNew = data(end, 2:end)'; % 最后一行输入

 

for i = 1 : 4

    pnew = pNew;  

    pnewn = mapminmax('apply', pnew, PSp); % 归一化

    HiddenOut = logsig(W1 * pnewn + repmat(B1, 1, ForcastSamNum)); % 隐含层输出

    anewn = W2 * HiddenOut + repmat(B2, 1, ForcastSamNum); % 输出层输出

    anew = mapminmax('reverse', anewn, PSt); % 反归一化

    preP(i) = anew; % 保存预测值

    pNew = [pNew(2:end); anew]; % 更新输入

end

 

6. 作图

最后,对预测结果进行可视化。

%% 6.作图

figure

plot(x, t, 'k:o', 'linewidth', 1.5);

hold on

plot(x, mapminmax('reverse', W2 * logsig(W1 * SamIn + repmat(B1, 1, trainNum)) + repmat(B2, 1, trainNum), PSt), 'r-^', 'linewidth', 1.5);

hold on

plot(13:16, preP, 'b--h', 'linewidth', 1.5);

legend('真实值', '拟合值', '预测值');

xlabel('序列'), ylabel('指标值');

set(gca, 'fontsize', 12)

 

disp('预测值:');

disp(preP);

 

三、结果展示

267b89230d58478db2ee62cf30371f57.jpg

 

四、结语

本文介绍了一种简单的BP神经网络时序预测方法,并提供了完整的Matlab代码。尽管该方法在某些情况下可能会出现收敛问题,但它为初学者提供了良好的学习基础。未来可以考虑使用更复杂的网络结构或优化算法来提高预测精度。希望这篇文章能够帮助你更好地理解BP神经网络在时序预测中的应用。

标签:预测,归一化,HiddenOut,神经网络,BP,W2,trainNum,权值
From: https://blog.csdn.net/2402_87132195/article/details/143188624

相关文章

  • 计算机毕业设计Spark+大模型某音视频情感分析 某音可视化 某音舆情监测 预测算法 某音
    《Spark+大模型抖音视频情感分析》开题报告一、研究背景与意义随着移动互联网和社交媒体的快速发展,短视频平台如抖音(TikTok)已成为全球范围内广受欢迎的娱乐和信息获取渠道。用户在这些平台上发布的视频内容涵盖了娱乐、教育、新闻等各个领域,形成了海量的用户行为数据和视频内......
  • 计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知
    下面是一个简单的文献推荐系统算法示例,使用Python和scikit-learn库。这个示例基于协同过滤算法,该算法通过分析用户对文献的评分来推荐新的文献。为了简单起见,这里使用了一个小的数据集,并假设数据已经预处理过(例如,用户-文献评分矩阵)。首先,确保你已经安装了scikit-learn库:pip......
  • 基于卷积神经网络的瓶盖状态识别系统,resnet50,mobilenet模型【pytorch框架+python源码
    更多目标检测和图像分类识别项目可看我主页其他文章功能演示:卷积神经网络,瓶盖状态识别系统,resnet50,mobilenet【pytorch框架,python】_哔哩哔哩_bilibili(一)简介基于卷积神经网络的瓶盖状态识别系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,训练好的模型权重,......
  • 基于python的足球比赛数据及可视化 python 足球预测
    那么四年一度的世界杯即将要在卡塔尔开幕了,对于不少热爱足球运动的球迷来说,这可是十分难得的盛宴,而对于最后大力神杯的归属,相信很多人都满怀着期待,每个人心中都有不同的答案。软件免费下载:http://lcsjfx.com/SoccerPredictor/DownLoad今天小编就通过Python数据分析以及机器......
  • KBPC1010-ASEMI新能源专用方桥KBPC1010
    编辑:llKBPC1010-ASEMI新能源专用方桥KBPC1010型号:KBPC1010品牌:ASEMI封装:KBPC-4安装方式:直插批号:2024+现货:50000+正向电流(Id):10A反向耐压(VRRM):1000V正向浪涌电流:200A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:MIL功率(Pd):中小功率工作温度:-55°C~150°C类型:整流方......
  • Webpack5-合并脚本(webpack-merge-and-include-globally)
    安装插件:yarnaddwebpack-merge-and-include-globally-Dwebpack.config.jsconstpath=require("path");constMergeIntoSingleFilePlugin=require('webpack-merge-and-include-globally');module.exports={mode:'none',e......
  • Webpack5-Eslint、Babel
    处理js资源有人可能会问,js资源Webpack不能已经处理了吗,为什么我们还要处理呢?原因是Webpack对js处理是有限的,只能编译js中ES模块化语法,不能编译其他语法,导致js不能在IE等浏览器运行,所以我们希望做一些兼容性处理。其次开发中,团队对代码格式是有严格要求的,我们......
  • TimeDART:基于扩散自回归Transformer 的自监督时间序列预测方法
    近年来,随着机器学习技术的进步,深度神经网络已经成为解决时间序列预测问题的主流方法。这反映了学术界和工业界在利用先进技术处理序列数据复杂性方面的持续努力。自监督学习概述基本定义自监督学习是一种创新的学习范式,其特点是模型能够从未标记数据中通过内部生成的监督信号进......
  • Webpack5-开发模式、生产模式配置
    生产模式介绍生产模式是开发完成代码后,我们需要得到代码将来部署上线。这个模式下我们主要对代码进行优化,让其运行性能更好。优化主要从两个角度出发:优化代码运行性能优化代码打包速度生产模式准备我们分别准备两个配置文件来放不同的配置1.文件目录├──webpack-t......
  • OpenPSG:离AGI再进一步,首个开放环境关系预测框架 | ECCV'24
    全景场景图生成(PSG)的目标是对对象进行分割并识别它们之间的关系,从而实现对图像的结构化理解。以往的方法主要集中于预测预定义的对象和关系类别,因此限制了它们在开放世界场景中的应用。随着大型多模态模型(LMMs)的快速发展,开放集对象检测和分割已经取得了重大进展,但PSG中的开放集关......