BP神经网络及其Python和MATLAB实现预测

BP神经网络及其Python和MATLAB实现预测

引言

BP神经网络(Back Propagation Neural Network),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性,BP神经网络在模式识别、函数逼近、优化问题等多个领域有着广泛的应用。本文将详细介绍BP神经网络的基本原理,并通过Python和MATLAB的示例代码展示其在时间序列预测中的应用。

BP神经网络的基本原理

BP神经网络主要由输入层、隐藏层和输出层组成。输入层接收外部信号和数据,隐藏层进行信息处理,输出层产生预测结果。在训练过程中,网络通过前向传播计算输出值,并通过反向传播算法调整权重和偏置,以减小输出误差。

1. 前向传播

在前向传播过程中,输入数据通过输入层进入网络,经过隐藏层处理,最后由输出层输出预测结果。每个神经元接收来自前一层神经元的加权输入,并通过激活函数计算输出。输出层的输出即为网络的预测值。

2. 反向传播

反向传播是BP神经网络的核心算法,用于根据输出误差调整网络的权重和偏置。首先,计算输出层的误差,然后利用误差反向传播到隐藏层,再逐层向前传播,直到输入层。在反向传播过程中,使用梯度下降等优化算法来更新权重和偏置,以减小误差。

Python实现BP神经网络预测

在Python中,我们可以使用Keras库来构建和训练BP神经网络。Keras是一个高层神经网络API,它可以运行在TensorFlow、CNTK或Theano之上,以简化神经网络的构建、训练和评估过程。

示例代码

以下是一个使用Keras库构建简单BP神经网络进行时间序列预测的示例代码。

import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split# 随机生成模拟数据
np.random.seed(42)
input_dim = 1
output_dim = 1
X = np.random.rand(1000, input_dim)
y = 3 * X ** 2 + 0.5 * np.sin(2 * np.pi * X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建Sequential模型
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(input_dim,)))
model.add(Dense(32, activation='relu'))
model.add(Dense(output_dim, activation='linear'))# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)# 使用模型进行预测
predictions = model.predict(X_test)# 可视化预测结果与实际值对比
plt.figure(figsize=(10, 6))
plt.scatter(range(1, len(y_test) + 1), y_test, color='blue', linewidth=1, label='Actual Values')
plt.plot(range(1, len(y_test) + 1), predictions, color='red', linewidth=1, label='Predictions')
plt.xlabel('Input Feature')
plt.ylabel('Output Feature')
plt.legend()
plt.title('Actual vs Predicted Values')
plt.savefig('plot.png')# 计算并打印RMSE
from sklearn.metrics import mean_squared_error
rmse = np.sqrt(mean_squared_error(y_test, predictions))
print(f"Root Mean Squared Error (RMSE): {rmse:.2f}")

在这个示例中,我们首先生成了一些非线性相关的数据,并将其划分为训练集和测试集。然后,我们构建了一个包含两个隐藏层的BP神经网络,并使用均方误差作为损失函数和Adam优化器来训练模型。最后,我们使用训练好的模型对测试集进行预测,并可视化预测结果与实际值的对比。

MATLAB实现BP神经网络预测

MATLAB是一个广泛应用于数学、工程和科学计算的商业数学软件,内置了大量用于神经网络设计的工具箱,使得在MATLAB中实现BP神经网络变得相对容易。

示例代码

以下是一个使用MATLAB的Neural Network Toolbox来构建和训练BP神经网络进行时间序列预测的示例代码。

% 清理环境
clear; clc; close all;% 随机生成模拟数据
rng(42); % 设置随机数生成器种子
input_dim = 1;
output_dim = 1;
X = rand(1000, input_dim);
y = 3 * X.^2 + 0.5 * sin(2 * pi * X);% 划分训练集和测试集
cv = cvpartition(size(X, 1), 'HoldOut', 0.2);
idxTrain = training(cv);
idxTest = test(cv);
X_train = X(idxTrain, :);
y_train = y(idxTrain);
X_test = X(idxTest, :);
y_test = y(idxTest);% 创建BP神经网络
net = feedforwardnet(10); % 创建一个具有10个神经元的隐藏层的网络% 配置训练参数
net.trainFcn = 'trainlm'; % 使用Levenberg-Marquardt优化算法
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;% 训练网络
[net, tr] = train(net, X_train', y_train'); % 注意MATLAB要求输入是列向量% 使用训练好的网络进行预测
y_pred = net(X_test');% 可视化预测结果与实际值对比
figure;
plot(y_test, 'bo-', 'DisplayName', 'Actual Values');
hold on;
plot(y_pred, 'r*-', 'DisplayName', 'Predictions');
legend show;
xlabel('Sample Index');
ylabel('Output Value');
title('Actual vs Predicted Values');
grid on;% 计算并打印RMSE
rmse = sqrt(mean((y_pred - y_test).^2));
fprintf('Root Mean Squared Error (RMSE): %.2f\n', rmse);

在这个MATLAB示例中,我们首先使用rng函数设置了随机数生成器的种子,以确保每次运行代码时生成的数据相同。然后,我们生成了一些模拟数据,并将其划分为训练集和测试集。接着,我们使用feedforwardnet函数创建了一个具有单个隐藏层的BP神经网络,该隐藏层包含10个神经元。之后,我们设置了网络的训练函数为Levenberg-Marquardt优化算法,并配置了训练参数。

在训练网络时,我们使用了train函数,并注意到MATLAB要求输入数据是列向量,因此我们对X_trainy_train进行了转置。训练完成后,我们使用训练好的网络对测试集进行了预测,并将预测结果与实际值进行了可视化对比。最后,我们计算了预测结果的均方根误差(RMSE),并将其打印到控制台。

通过这个MATLAB示例,我们可以看到使用MATLAB的Neural Network Toolbox来构建和训练BP神经网络进行时间序列预测是相对直观和简单的。这个工具箱提供了丰富的函数和工具来支持神经网络的设计、训练和评估,使得用户可以轻松地实现复杂的神经网络模型。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置本地开发服务器代理请求以及登录模块开发(二)

项目初始化完成之后,准备开始进行项目的开发,首先配置好开发环境作为整个项目的基础 一、配置代理 1、config/proxy.ts配置代理 export default {// 如果需要自定义本地开发服务器 请取消注释按需调整dev: {// localhost:8000/api/** -> https://p…

第07课 Scratch入门篇:水果音乐钢琴

水果音乐钢琴 入门篇适合新手,如您已经学过,可以忽略本节课! 一、故事背景: 在一个充满创意和想象的奇妙世界里,有一架与众不同的钢琴——水果音乐钢琴。这架钢琴的键盘不是由普通的黑白键组成,而是由各种…

http post请求 - 最简测试环境 - 使用flask

1.缘起 工作中,我们有时需要测试web post功能是否正常。这类测试,客户端的请求很容易实现,比如portman,比如非常简单的命令行curl语法: curl -X POST http://127.0.0.1:5000/post-endpoint/ -F "warning_image/p…

鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇

一、概述 云数据库是一款基于对象模型的数据库,采用存储区、对象类型和对象三级结构。 数据模型 存储区 存储区是一个独立的数据存储区域,多个数据存储区之间相互独立,每个存储区拥有完全相同的对象类型定义 --类似于关系型数据库中的da…

一番赏小程序开发,为消费者带来更多新鲜体验

一番赏作为经典的潮玩方式,深受消费者的喜爱,一番赏还会与不同的热门IP合作,不断推出新的赏品,吸引众多粉丝。赏品的内容非常丰富,从手办、公仔玩具等,还设有隐藏款和最终赏商品,对玩家拥有着非…

哲学CSSCI南大核心期刊论文投稿推荐(含发表方向)

发表哲学方向的C刊论文,却在选刊上一直找不到合适的。本文介绍14本哲学CSSCI南大核心期刊名单,帮助您快速找到哲学类期刊! 哲学类CSSCI核心期刊推荐: 1、逻辑学研究 发表内容方向:符号逻辑、非形式逻辑、逻辑与哲学、…

Synchronized的锁升级过程是怎样的?

文章目录 一、Synchronized的使用1、修饰实例方法2、修饰静态方法3、修饰代码块4、总结: 二、Monitor1、Java对象头1.1 32 位虚拟机的对象头1.2 64位虚拟机的对象头 2、Mark Word 结构3、Moniter4、Synchronized 字节码5、轻量级锁6、锁膨胀7、自旋优化8、偏向锁9、…

命令行使用ADB,不用root,完美卸载小米预装软件

ADB安装与运行 install java 下载安装 注意选择JDK17以上版本 https://www.oracle.com/java/technologies/downloads/#jdk22-windows 选择中间的安装文件下载 编辑系统变量 C:\Program Files (x86)\Java\jdk-22 C:\Program Files (x86)\Java\jdk-22\bin 把C:\Progra…

K210视觉识别模块学习笔记7:多线程多模型编程识别

今日开始学习K210视觉识别模块: 图形化操作函数 亚博智能 K210视觉识别模块...... 固件库: canmv_yahboom_v2.1.1.bin 训练网站: 嘉楠开发者社区 今日学习使用多线程、多模型来识别各种物体 这里先提前说一下本文这次测试实验的结果吧:结果是不太成…

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印,是许多视频编辑爱好者的常见需求。在这篇文章中,我们将探讨几种视频去水印的技巧,在数字化时代,视频和图片的传播越来越方便,但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

捕获会自动消失的消息提示弹窗

如上图,我们会在一些场景碰到会自动消失的消息提示弹窗,一般存在个3-5秒,我们在做UI断言时,需要监测这个弹窗是否会出现,就需要去捕获这个弹窗的位置 我们打开浏览器的开发者模式(F12),找到源码(Sources) …

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

MiniExcel:.NET中处理Excel的高效方案

在.NET开发环境中,处理Excel文件是一项常见的任务,无论是数据导入、导出还是报表生成。传统的解决方案可能存在性能瓶颈或功能限制。MiniExcel作为一个现代、高效的库,为.NET开发者提供了一个强大的工具来简化Excel操作。本文将介绍MiniExcel…

爬虫程序在采集亚马逊站点数据时如何绕过验证码限制?

引言 在电商数据分析中,爬虫技术的应用日益广泛。通过爬虫技术,我们可以高效地获取大量的电商平台数据,这些数据对于市场分析、竞争情报、价格监控等有着极其重要的意义。亚马逊作为全球最大的电商平台之一,是数据采集的重要目标…

【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位

目前项目当中使用的Nacos版本为2.0.2,该版本可能存在一定的安全风险。软件的安全性是一个持续关注的问题,尤其是对于像Nacos这样的服务发现与配置管理平台,它在微服务架构中扮演着核心角色。随着新版本的发布,开发团队会修复已知的…

【解决】ubuntu20.04 root用户无法SSH登陆问题

Ubuntu root用户无法登录的问题通常可以通过修改‌SSH配置文件和系统登录配置来解决。 修改SSH配置文件 sudo vim /etc/ssh/sshd_config 找到 PermitRootLogin 设置,并将其值更改为 yes 以允许root用户通过SSH登录 保存并关闭文件之后,需要重启SSH服务…

【HarmonyOS】实现矩形上下拖动、动态拖拽修改高度

简介 实现一个矩形块上下拖动,并且可以拖动边缘定位点改变矩形块高度。实现效果如下: 代码 Entry Component struct Rec_Page {State penOffsetY: number 0;State offsetX: number 0State offsetY: number 0State positionX: number 0State posi…

Microsoft 官网免费下载安装正版官方增强版 office LSTC (长期支持版) 包含 visio , access

1.进入下方网址: https://www.microsoft.com/en-us/download/details.aspx?id49117 下载文件: officedeploymenttool_17126-20132.exe 现在看到下载链接可能失效了,但是下述步骤任然正确。需要下载文件的可以私信发送。 2.进入下方网址…

家具购物小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,家具分类管理,家具新品管理,订单管理,系统管理 微信端账号功能包括:系统首页,家具新品,家具公告&#xff0…