基于粒子群优化算法的BP神经网络预测模型(Matlab代码实现)

news2024/11/25 10:08:17

 

目录

1 概述

2 粒子群优化算法

3 BP神经网络

4 PSO优化 BP网络算法

5 运行结果

6 参考文献 

7 Matlab代码实现



1 概述

在工程应用中经常会遇到一些复杂的非线性系统,这些系统的状态方程复杂,难以准确的用数学方法建模,而BP神经网络实质上实现了一个从输入到输出的映射功能,数学理论证明三层的神经网络就能够以任意精度逼近任何非线性连续函数,具有非常强的非线性映射能力,使得其特别适合于求解内部机制复杂的问题.该方法是把未知系统看成是一个黑箱,首先用系统输入输出数据训练BP网络,使得网络能够表达该未知非线性函数,然后用训练好的网络预测系统输出".但是传统的BP网络算法具有收敛速度慢、容易陷入局部极值和误差比较大等缺点,因此优化这种网络成了必要.粒子群优化算法作为一种智能算法,是一种仿生算法和随机搜索算法,参数少,寻优能力较好,将其和BP网络结合起来,优化BP网络的权值和阈值,弥补了BP网络的一些缺点,提高了BP网络拟合函数的能力.

2 粒子群优化算法

粒子群优化算法是一种群体智能的优化算法,它是源于对鸟类捕食行为的研究,鸟类捕食时,每只鸟找到食物最简单最有效的方法就是搜寻当前距离食物最近的鸟的周围区域. PSO算法是从这种生物种群行为特征中得到启发并求解优化问题的.算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值,粒子的速度决定了其移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优.

粒子群算法(带约束处理)——Python&Matlab实现

3 BP神经网络

BP神经网络是一种多层前馈神经网络,拓扑结构包括:输入层、隐层、输出层,它的主要特点是信号前向传递,误差反向传播.在前向传递中,输人信号从输人层经隐含层逐层处理,直至输出层,每--层的神经元状态只影响下一层神经元状态.如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使网络预测输出不断逼近期望输出. BP网络训练的步骤如下:

4 PSO优化 BP网络算法

BP网络的非线性泛化能力很强,但是其收敛速度慢,容易陷人局部极值,误差比较大,为了弥补BP网络的这种缺点,将PSO算法与BP网络结合,用PSO算法优化BP网络的权值和阈值,提高了网络的非线性拟合能力. PSO-BP算法如下:
(1)初始化网络的训练样本数m,测试样本数n ,隐层节点数hidden _.num,粒子群数目particle_num,迭代次数epoch ,惯性权重w ,加速度因子c,C2.
(2)根据目标函数获得训练样本和测试样本的输人和理想输出,并画出理想曲线和测试样本点.(3)随机初始化粒子群的位置和速度,并计算各粒子的适应度值.
(4)根据上述公式更新各个粒子的位置和速度,并记录每个粒子的最佳位置.(5)记录全局最优位置.
(6)计算测试样本的输出,并画出预测曲线及误差曲线.

部分代码:

%% 清空环境变量
tic
clc
clear
close all
format compact
%% 导入数据
load data1
input=In';
output=U3;
%%
% 随机生成训练集、测试集
rand('seed',0)

k = randperm(size(input,1));
m=7100;
P_train=input(k(1:m),:)';
T_train=output(k(1:m));

P_test=input(k(m+1:end),:)';
T_test=output(k(m+1:end));

%% 归一化
% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);

%% 节点个数
inputnum=size(Pn_train,1);
hiddennum=5;
outputnum=1;
%% 没有优化的bp
net=newff(Pn_train,Tn_train,hiddennum);
net.trainParam.epochs=200;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00000001;
net.trainParam.max_fail = 200;

%网络训练
[net,per2]=train(net,Pn_train,Tn_train);
an=sim(net,Pn_test);
error=an-Tn_test;

test_simu=mapminmax('reverse',an,outputps);
disp('优化前')
E1=norm(error);
E2=mse(error)
MAPE=mean(abs(error)./Tn_test);

figure
plot(test_simu)
hold on
plot(T_test)
legend('实际输出','期望输出')

%% 粒子群优化bp


% [bestchrom,trace]=psoforbp(inputnum,hiddennum,outputnum,Pn_train,Tn_train);%粒子群算法
% x=bestchrom;
% save result x
load result%直接调用训练好的
% 用pso优化的BP网络进行值预测
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2';

%% BP网络训练
%网络进化参数
net.trainParam.epochs=200;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00000001;
net.trainParam.max_fail = 200;

%网络训练
[net,per2]=train(net,Pn_train,Tn_train);

%% BP网络预测
%数据归一化
an=sim(net,Pn_test);
error=an-Tn_test;

test_simu=mapminmax('reverse',an,outputps);
disp('优化后')
E1=norm(error);
E2=mse(error)
MAPE=mean(abs(error)./Tn_test);
toc
%%
figure
plot(test_simu)
hold on
plot(T_test)
legend('实际输出','期望输出')

5 运行结果


 

 

 

 

6 参考文献 

部分理论引用网络文献,如有侵权请联系删除。

[1]郝海霞.用粒子群算法优化BP神经网络进行函数拟合[J].山西师范大学学报(自然科学版),2017,31(01):14-16.DOI:10.16207/j.cnki.1009-4490.2017.01.004.

7 Matlab代码实现

回复关键字

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【k8s】Kubernetes 基础组件详解

一、k8s简介 Kubernetes 是容器集群管理系统工具,是一个开源平台,可实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetesk8s是Kubernetes的缩写,Google 于 2014 年开源了 Kubernetes 项目,Kubernetes的名字来自希腊语&…

无延时直播/超低延时直播实际测试延时效果(项目实测组图)

阿酷TONY / 2022-11-30 / 长沙 / 超多组图 无延时直播/超低延时直播,主要只测试延时情况,没有涉及直播产品的功能、使用操作界面,有兴趣的朋友可以加联系我实际测试哦~~~ 1.无延时直播应用场景 无延时直播/超低延时常见应用场景&#…

近90天互动量破百万,「围炉煮茶」究竟做对了什么?

今年秋冬,“围炉煮茶”爆红网络。小红书相关笔记数量突破8万,累计话题浏览量1200万次,近90天互动量破百万! 茶,从老一辈的茶杯茶盘里,通过创新再造,成为年轻人的社交“新”头好。高流量曝光、高…

Go语言性能剖析利器--pprof实战

作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程。 优化思路 首先说一下性能优化的…

什么是文档管理?

什么是文档管理? 文档管理是指在公司或组织内部组织、存储和检索文档以及自动化工作流程所需的流程和资源。文档可以是硬拷贝或数字格式,包括合同、表单、发票、工作申请、福利登记信息和其他记录。 强大的文档管理的重要性 平均而言,由于…

Web实时预览 界面组件Telerik——提高开发者工作效率的完美组合

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供最完整的工具箱,用于构建现代和面向未来的业务应用程序。 Telerik ASP.NET AJAX (Web Forms) 组件在…

SAP ABAP OAOR SBDSV1新建BDS类/DOI大数据量输出EXCEL时错误空白或不完整

SAP ABAP OAOR SBDSV1新建BDS类/ DOI大数据量输出 EXCEL时错误空白或不完整 引言: 今日回顾 DOI 使用过程中的两个问题,第一个是管理性问题(新建 BDS 类),第二个是技术性问题( DOI 大数据量输出 EXCEL 时错…

数据对接:从Notion Database到低代码平台app

前言 Notion简介 近几年,有一款叫Notion的产品异常火爆,它是集笔记、任务管理、Wiki、数据管理为一体的产品,他主打两个理念「模块化」和「All-in-one」,Notion最有魅力的还是引进了Database和双向链的理念 Notion也算是一个渐…

美丽田园通过聆讯:上半年期内利润下降近80% 演员刘涛代言

雷递网 雷建平 12月13日由演员刘涛代言的美丽田园医疗健康产业有限公司(简称:“美丽田园”,Beauty Farm)日前通过聆讯,准备在港交所上市。上半年期内利润下降近80%美丽田园首家门店1993年成立,至今美丽田园…

C++ Reference: Standard C++ Library reference: Containers: map: map: operators

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/operators/ 函数 <map> std::relational operators (map) (1) template <class Key, class T, class Compare, class Alloc> bool operator ( const map<Key,T,Compare,Alloc>&…

记cf一些可能被hack的写法

1. unordered_map 现象 之前经常当O(1)用&#xff0c;作为一些卡常题的必备杀器&#xff0c; 而且&#xff0c;有的hdu/lc题不用umap的话&#xff0c;就只能手写哈希 但是&#xff0c;上次cf里写了个umap被卡了&#xff0c; 这才意识到之前看到的博客不是无稽之谈 其实我…

面试官:单体架构怎么向分布式微服务架构演变的?(8000字)

随着网站规模越来越大&#xff0c;单体应用往往很难再满足要求&#xff0c;就需要向分布式&#xff0c;微服务架构演变。 那么这个演变过程是怎么样的呢&#xff1f;都涉及到哪些组件&#xff0c;会遇到哪些问题&#xff0c;以及相应的解决方案都是什么&#xff0c;本篇文章就来…

吹爆,阿里MySQL优化笔记有多强?才在GitHub被BATJ联手封杀

公司来了个新同事&#xff0c;一看是个二本生&#xff0c;还是非科班出身&#xff0c;刚30岁。。。 结果没想到人家上来就把现有项目的性能优化了一遍&#xff0c;直接给公司节省了一半的成本&#xff0c;这种“王炸”打法&#xff0c;直接给所有人整懵了。 一问情况&#xff…

达梦:[-2420]:服务器未重启

在项目上&#xff0c;使用DMRMAN 备份数据库时&#xff0c;报[-2420]:服务器未重启的错。 因为是从实际生产的主备集群主节点拷贝的全备增备归档还原恢复到指定时间点还原恢复到指定时间点后&#xff0c;准备在测试环境搭建集群。 测试环境的主节点&#xff0c;还原恢复后&…

[附源码]Python计算机毕业设计高校勤工助学管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Word控件Spire.Doc 【超链接】教程(6):在C#去除word文档中的超链接

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

Jina AI创始人肖涵博士分享软件框架开发的3个常见错误及解决方法

回到三个月前一个晨跑的上午&#xff0c;你突然萌生了一个绝妙的想法在&#xff1a;“我要建立一个 AI 框架&#xff01;”你的大脑飞速运转&#xff0c;你的指尖在键盘上飞速敲打&#xff0c;快速地记下此刻的想法和灵感。你梦想着潜在的投资者&#xff0c;全新的应用程序&…

安卓玩机搞机技巧综合资源-----安卓机型固件中分区对应说明【十九】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

【Python爬虫+数据分析实战】Python采集北上广深天气数据,制作可视化动图—“天冷了就该钻被窝早睡觉啦~”

前言 哈喽哈喽&#xff01;我是栗子&#xff0c; 这几天冷吗&#xff1f;温差大吗&#xff1f;风大吗&#xff1f;瑟瑟发抖中。 别急&#xff01;下周起&#xff0c;小伙伴们直接冻傻&#xff0c;不信你看&#x1f4a8;&#x1f4a8;反正就是这个点基本上全国都降&#xff01…

pytorch实现猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第P4周&#xff1a;猴痘病识别&#x1f356; 作者&#xff1a;K同学啊一、前期准备 1.设置GPU import torch from torch import nn impo…