【股价预测】基于matlab遗传算法优化BP神经网络预测股价【含Matlab源码 1250期】

2024-04-11 06:18

本文主要是介绍【股价预测】基于matlab遗传算法优化BP神经网络预测股价【含Matlab源码 1250期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⛄一、遗传算法简介

1 引言
在这里插入图片描述
在这里插入图片描述
2 遗传算法理论
2.1 遗传算法的生物学基础
在这里插入图片描述
在这里插入图片描述
2.2 遗传算法的理论基础
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3 遗传算法的基本概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.4 标准的遗传算法
在这里插入图片描述
在这里插入图片描述
2.5 遗传算法的特点
在这里插入图片描述
在这里插入图片描述
2.6 遗传算法的改进方向
在这里插入图片描述
3 遗传算法流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4 关键参数说明
在这里插入图片描述

⛄二、BP神经网络简介

1 BP神经网络预测原理简介
BP 神经网络是一种多层前馈神经网络,常用的为输入层-单隐含层-输出层的三层结构,如下图所示。
在这里插入图片描述
BP神经网络训练的主要思想:输入的信号特征数据先映射到隐含层(激活函数实现),再映射到输出层(默认采用线性传递函数),得到期望输出值。将期望输出值和实际测量值做比较,计算误差函数J,再将误差反向传播,通过梯度下降等算法来调节BP网络的权值和阈值。重复该过程,直到满足设定的目标误差或者最大迭代次数等终止准则,停止训练。

⛄三、部分源代码

clear all
clc
close all
tic
%% 全局变量

global pn
global tn
global R
global S2
global S1
global S
S1 = 12;
%% 数据处理
load data.mat
X=xlsread(‘数据.xls’);
data = [data X(:,end)];
% 85%用于训练,15%进行预测
nn = floor(0.85*size(data,1));
input=data(1:nn,1:3)‘;
output=data(1:nn,end)’;
input_test=data(nn+1:end,1:3)‘;
output_test=data(nn+1:end,end)’;

M =size(input,2); %输入节点个数
N =size(output,2);%输出节点个数
%% 训练数据
p = input;
t = output;
[pn,minp,maxp,tn,mint,maxt] =premnmx(p,t);%归一化
%% 建立神经网络
net = newff(minmax(pn),[S1,1],{‘tansig’,‘purelin’});
net.trainParam.show = 50;
net.trainParam.lr = 0.1;
net.trainParam.epochs = 1000;
net.trainParam.goal =1e-10;
[net,tr] = train(net,pn,tn);
%% 遗传操作
R = size(p,1);
S2= size(t,1);
S = RS1+S1S2+S1+S2;
aa = ones(S,1)*[-1 1];
popu = 50;
initPpp = initializega(popu,aa,‘gabpEval’);
gen = 500;
[x,endPop,bPop,trace] = ga(aa,‘gabpEval’,[],initPpp,[1e-6 1 1],‘maxGenTerm’,gen,…
‘normGeomSelect’,[0.09],[‘arithXover’],[2],‘nonUnifMutation’,[2 gen 3]);
%% 画图迭代图
figure(1)
plot(trace(:,1),1./trace(:,3),‘r-’);
hold on
grid on
plot(trace(:,1),1./trace(:,2),‘b-’);
xlabel(‘迭代数’)
ylabel(‘均方误差’)
title(‘均方误差曲线图’)
figure(2)
plot(trace(:,1),trace(:,3),‘r-’);
hold on
grid on
plot(trace(:,1),trace(:,2),‘b-’);
xlabel(‘迭代数’)
ylabel(‘适应度函数值’)
title(‘适应度函数迭代曲线图’)
[W1,B1,W2,B2,val] = gadecod(x);
W1;
W2;
B1;
B2;
net.IW{1,1} = W1;
net.LW{2,1} = W2;

net = train(net,pn,tn);
k = input_test;
kn = tramnmx(k,minp,maxp);
s_bp = sim(net,kn);
s_bp22 = postmnmx(s_bp,mint,maxt);
toc
load gabp.mat
xk=2;
figure
plot(1:length(output_test),output_test,‘r-*’,1:length(output_test),s_bp22,‘b-o’,‘linewidth’,xk)
grid on%加网格
legend(‘真实值’,‘预测值’)%图例
title(‘神经网预测真实值与预测值对比’)%标题
xlabel(‘样本’)%横坐标标题
ylabel(‘成交额’)%纵坐标标题
xk = 2;
error2 = abs(s_bp22 - output_test)./output_test.*100;
figure%画图
plot(1:length(error2),error2,‘ko-’,‘linewidth’,xk)%测试输出与真实值的对比图
grid on%加网格
title(‘测试样本相对误差图%’)%标题
xlabel(‘样本’)%横坐标标题
ylabel(‘相对误差%’)%纵坐标标题
zh_gabp = [output_test ;s_bp22; error2]
save zh_gabp zh_gabp
function [W1,B1,W2,B2,val] = gadecod(x)
global pn;
global tn;
global R;
global S2;
global S1;
global S

for i = 1 : S1
for k = 1 : R
W1(i,k) = x(R*(i-1)+k);
end
end

for i = 1 : S2
for k = 1 : S1
W2(i,k) = x(S1*(i-1)+k+R*S1);
end
end

for i = 1: S1
B1(i,1) = x((RS1+S1S2)+i);
end

for i = 1: S2
B2(i,1) = x((RS1+S1S2+S1)+i);
end

A1 = tansig(W1pn,B1);
A2 = purelin(W2
A1,B2);
SE = sumsqr(tn-A2);
val = 1/SE;
%% 训练模型
[net,tr] = train(net,pn,tn);%训练网络
nihe = sim(net,pn);%训练输出
nihe2 = postmnmx(nihe,mint,maxt);%训练输出反归一化
%% 预测
s_bp = sim(net,kn);%预测
s_bp2 = postmnmx(s_bp,mint,maxt);%预测输出反归一化
s_bp2 = s_bp2’;%转置
figure%画图
xk = 2;
plot(1:length(outtest),outtest,‘r–’,1:length(outtest),s_bp2,‘b.-’,‘linewidth’,xk)%测试输出与真实值的对比图
grid on%加网格
legend(‘真实值’,‘预测值’)%图例
title(‘神经网预测真实值与预测值对比’)%标题
xlabel(‘样本’)%横坐标标题
ylabel(‘成交额’)%纵坐标标题
%% 误差分析
j_error = abs(outtest - s_bp2’); %绝对误差
x_error = abs(outtest - s_bp2’)./outtest.*100;%相对误差
figure%画图
plot(1:length(x_error),x_error,‘ko-’,‘linewidth’,xk)%测试输出与真实值的对比图
grid on%加网格
title(‘测试样本相对误差图%’)%标题
xlabel(‘样本’)%横坐标标题
ylabel(‘相对误差%’)%纵坐标标题
%% 显示
disp(‘测试真实值’)
outtest
disp(‘测试预测值’)
s_bp2
disp(‘相对误差%’)
x_error
zh_bp = [outtest; s_bp2’; x_error];
save zh_bp zh_bp

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]郭利进,乔志忠.基于遗传算法优化BP神经网络的粮食温度预测研究[J].粮食与油脂. 2023,36(01)

这篇关于【股价预测】基于matlab遗传算法优化BP神经网络预测股价【含Matlab源码 1250期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893286

相关文章

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML