Adaboost集成学习 | Matlab实现基于CNN-LSTM-Adaboost集成学习时间序列预测(股票价格预测)

目录

    • 效果一览
    • 基本介绍
    • 模型设计
    • 程序设计
    • 参考资料

效果一览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本介绍

Adaboost集成学习 | Matlab实现基于CNN-LSTM-Adaboost集成学习时间序列预测(股票价格预测)

模型设计

融合Adaboost的CNN-LSTM模型的时间序列预测,下面是一个基本的框架。

数据准备:
收集并整理用于时间序列预测的数据集。确保数据集包含时间序列的输入特征和对应的目标变量。
划分数据集为训练集和测试集,一般按照时间顺序划分。
单个模型训练:
使用CNN-LSTM模型对时间序列数据进行预测。
Adaboost集成:
将CNN-LSTM的预测结果作为特征输入到Adaboost算法中。
将预测结果作为Adaboost的训练样本标签,并为每个样本分配一个权重。
训练Adaboost模型,通过迭代选择最佳的基分类器,并更新样本权重。
模型预测:
对测试集中的时间序列数据,使用已训练的Adaboost模型进行预测,得到最终的时间序列预测结果。
模型评估:
使用测试集对集成模型进行评估,计算预测结果与真实值之间的误差指标,如均方根误差(RMSE)或平均绝对误差(MAE)。

程序设计

  • 完整程序订阅专栏Adaboost集成学习后获取。
%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc  %% 导入数据
data =  readmatrix('Price.xlsx');
[h1,l1]=data_process(data,6);   %步长为6,采用前6个时刻预测第7个时刻
res = [h1,l1];
num_samples = size(res,1);   %样本个数% 训练集和测试集划分
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);layers0 = [ ...% 输入特征sequenceInputLayer([numFeatures,1,1],'name','input')   %输入层设置sequenceFoldingLayer('name','fold')         %使用序列折叠层对图像序列的时间步长进行独立的卷积运算。% CNN特征提取convolution2dLayer([3,1],16,'Stride',[1,1],'name','conv1')  %添加卷积层,64,1表示过滤器大小,10过滤器个数,Stride是垂直和水平过滤的步长batchNormalizationLayer('name','batchnorm1')  % BN层,用于加速训练过程,防止梯度消失或梯度爆炸reluLayer('name','relu1')       % ReLU激活层,用于保持输出的非线性性及修正梯度的问题% 池化层maxPooling2dLayer([2,1],'Stride',2,'Padding','same','name','maxpool')   % 第一层池化层,包括3x3大小的池化窗口,步长为1,same填充方式% 展开层sequenceUnfoldingLayer('name','unfold')       %独立的卷积运行结束后,要将序列恢复%平滑层flattenLayer('name','flatten')lstmLayer(25,'Outputmode','last','name','hidden1') dropoutLayer(0.1,'name','dropout_1')        % Dropout层,以概率为0.2丢弃输入%% Set the hyper parameters for unet training
options0 = trainingOptions('adam', ...                 % 优化算法Adam'MaxEpochs', 100, ...                            % 最大训练次数'GradientThreshold', 1, ...                       % 梯度阈值'InitialLearnRate', 0.01, ...         % 初始学习率'LearnRateSchedule', 'piecewise', ...             % 学习率调整'LearnRateDropPeriod',70, ...                   % 训练100次后开始调整学习率'LearnRateDropFactor',0.01, ...                    % 学习率调整因子'L2Regularization', 0.001, ...         % 正则化参数'ExecutionEnvironment', 'cpu',...                 % 训练环境'Verbose', 1, ...                                 % 关闭优化过程'Plots', 'none');                    % 画出曲线%% Adaboost增强学习部分
%  权重初始化%% 
D = ones(1, M) / M;%%  参数设置
K = 5;                       % 弱回归器个数%%  弱回归器回归
for i = 1 : Ki%%  创建模型clear netnet = trainNetwork(trainD,targetD',lgraph0,options0);result1 = predict(net, trainD); result2 =  predict(net, testD); %  数据格式转换E_sim1 = double(result1);% cell2mat将cell元胞数组转换为普通数组E_sim2 = double(result2);%%  仿真预测t_sim1(i, :) = E_sim1';t_sim2(i, :) = E_sim2';%%  数据反归一化
T_sim1 = mapminmax('reverse', T_sim1, ps_output);
T_sim2 = mapminmax('reverse', T_sim2, ps_output);
T_sim1 = double(T_sim1);
T_sim2 = double(T_sim2);%%  计算各项误差参数  %% 
% 指标计算
disp('…………CNN-LSTM-Adaboost训练集误差指标…………')
[test_MAE1,test_MAPE1,test_MSE1,test_RMSE1,test_R2_1,test_RPD1] = calc_error(T_train,T_sim1);
fprintf('\n')
disp('…………CNN-LSTM-Adaboost测试集误差指标…………')
[test_MAE2,test_MAPE2,test_MSE2,test_RMSE2,test_R2_2,test_RPD2]  = calc_error(T_test,T_sim2);
fprintf('\n')%%  训练集绘图 %% 
figure
plot(1:M,T_train,'r-','LineWidth',1,'MarkerSize',2)
hold on
plot(1:M,T_sim1,'b-','LineWidth',1,'MarkerSize',3)legend('真实值','CNN-LSTM-Adaboost预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';['(R^2 =' num2str(test_R2_1) ' RMSE= ' num2str(test_RMSE1) ' MSE= ' num2str(test_MSE1)  ')'];[ '(MAE= ' num2str(test_MAE1) ' MAPE= ' num2str(test_MAPE1) ' RPD= ' num2str(test_RPD1) ')' ]};
title(string)%测试集误差图  %% 
figure
plot(T_test-T_sim2,'b-','LineWidth',0.1,'MarkerSize',2)
xlabel('测试集样本编号')
ylabel('预测误差')
title('测试集预测误差')
grid on;
legend('CNN-LSTM-Adaboost预测输出误差')

训练结束: 已完成最大轮数。
…………CNN-LSTM-Adaboost训练集误差指标…………
1.均方差(MSE):5.0615
2.根均方差(RMSE):2.2498
3.平均绝对误差(MAE):1.7773
4.平均相对百分误差(MAPE):3.0813%
5.R2:98.1767%
6.剩余预测残差RPD:7.4167

…………CNN-LSTM-Adaboost测试集误差指标…………
1.均方差(MSE):60.8207
2.根均方差(RMSE):7.7988
3.平均绝对误差(MAE):6.601
4.平均相对百分误差(MAPE):6.2778%
5.R2:46.9453%
6.剩余预测残差RPD:2.3064

参考资料

[1] https://hmlhml.blog.csdn.net/article/details/135536086?spm=1001.2014.3001.5502
[2] https://hmlhml.blog.csdn.net/article/details/137166860?spm=1001.2014.3001.5502
[3] https://hmlhml.blog.csdn.net/article/details/132372151

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

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

相关文章

前端必看的2024 年 7 个 Web 前端开发趋势【文末福利=网盘分享2024web前端技术资料,学习资源】

目录 前言 趋势一:新的样式解决方案和组件库将持续涌现 趋势二:利用 AI 来增强开发流程 趋势三:SSR 和 SSG 两种框架之间的竞争将会愈演愈烈 趋势四:前端、后端和全栈开发之间的界限将越来越模糊 趋势五:越来越多的人…

Python数据库编程指南:连接与操作SQLite与MySQL

目录 一、引言 二、SQLite数据库连接与操作 (一)安装SQLite库 (二)建立数据库连接 (三)执行SQL语句 (四)注意事项 三、MySQL数据库连接与操作 (一)安…

阿里云 Ubuntu 22.04.4 LTS 安装postfix+dovecot 搭建邮件服务器

一 安装 1安装postfix sudo apt-get install postfix #如果没有弹出配置界面,运行 dpkg-reconfigure postfix #sudo vim /etc/postfix/main.cf smtpd_banner $myhostname ESMTP $mail_name (Ubuntu) biff no append_dot_mydomain no readme_directory no co…

Leetcode.2786 访问数组中的位置使分数最大

题目链接 Leetcode.2786 访问数组中的位置使分数最大 rating : 1732 题目描述 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums 和一个正整数 x x x 。 你 一开始 在数组的位置 0 0 0 处,你可以按照下述规则访问数组中的其他位置: 如果你…

阿里云 OpenSearch RAG 应用实践

2024年5月18日,阿里巴巴 OpenSearch 研发负责人刑少敏应邀参与AICon全球人工智能开发与应用大会暨大模型应用生态展,分享《OpenSearch RAG 应用实践》,介绍了阿里云OpenSearch在RAG方面的应用和探索。以下是主题演讲的逐字稿分享:…

Python学习之旅:你的大学计算机专业宝藏路线图

在信息时代的浪潮中,Python以其强大的功能和极简的语法成为了无数程序员心中的白月光。作为大学计算机专业的学生,掌握Python不仅能够为未来的职业生涯铺路,更能让您在学术研究和实际应用中如鱼得水。今天,我将与大家分享一套实用…

【SQL边干边学系列】08高级问题-4

文章目录 前言回顾高级问题48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 答案48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 未完待续 前言 该系列教程,将会从实际问题出发,边干边学&#xff…

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

文章汇总 总体来看像是一种带权重的残差,但解决的如何高效问题的事情。 相比模型的全微调,作者提出固定预训练模型参数不变,在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数,用以模拟参数的变化量。 模型架构 h W 0 x △…

31、shell循环

一、循环 循环:循环是一种重复执行一段代码的结构。只要满足循环的条件,会一直执行这个代码。 循环条件:在一定范围之内,按照指定的次数来执行循环。 循环体:在指定的次数内,执行的命令序列。只要条件满…

深入解析 Spring Cloud Seata:分布式事务的全面指南

🧨🧨🧨深入解析 Spring Cloud Seata:分布式事务的全面指南 在微服务架构中,分布式事务的处理是一项复杂而重要的任务。Spring Cloud Seata 是一款专为分布式事务而设计的解决方案,它由阿里巴巴开源&#x…

宏电“灌区哨兵”助力灌区信息化建设,开启灌区“智水”时代

灌区是保障国家粮食安全的重要水利设施。“十四五”提出,要推进大中型灌区节水改造和精细化管理。灌区信息化是建设智慧水利、深化行业监管、提升灌区科学管理水平的基础支撑,也是“十四五”期间灌区现代化改造的重点内容之一。 宏电智慧灌区信息化解决方…

2024脑卒中评估量表分享

常笑医学整理了5个常用的脑卒中评估量表,供临床医护工作人员参考。 Essen脑卒中风险评分量表-常笑医学网​ (完整量表请点击量表名称查看) Essen脑卒中风险评估量表,是一个简便、易于临床操作的9分量表,是根据氯吡格雷…

k8s nginx.conf配置文件配置

无状态nginx配置nginx.conf覆盖容器配置nginx.conf 代码:events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$request&q…

reGeorg隐秘隧道搭建

reGeorg隐秘隧道搭建 【实验目的】 通过学习reGeorg与Proxifier工具使用,实现外网攻击端连接内网主机远程桌面。 【知识点】 python、reGeorg、proxifier。 【实验原理】 在内网渗透中,由于防火墙的存在,导致无法对内网直接发起连接&#xff…

Linux多线程编程中的同步与互斥

文章目录 一、线程同步与互斥1、理解线程同步2、互斥的概念3、小结 二、互斥锁(Mutex)1、互斥锁的定义和作用2、pthread库中的互斥锁3、互斥锁的实现原理4、示例代码演示互斥锁的基本用法 三、条件变量(Condition Variable)1、条件…

IDEA 配置方法模板无法获取到参数值和返回值(methodParameters()、methodReturnType()获取不到值)

问题现象: 我在 review 同事代码时候,发现方法上有注释,但是注释上又没有方法参数和返回值,这不是IDEA 配置了方法模板就可以自动生成的嘛,我出于好奇去问了下该同事是怎么回事,该同事有点不好意思的说我配…

昂辉科技EasySAR-BootLoader上位机产品

近年来,硬件标准化、同质化和软件差异化、复杂化成为了汽车产品研发的重要趋势。与此同时,大量的智能化功能和快速上车的节奏,对软件开发提出了更高的要求。在软硬件解耦的大背景下,建立统一的软件体系和开发工具以紧跟硬件更新迭…

【NOI-题解】1389 - 数据分析1750 - 有0的数1457 - 子数整除1121 - “倒”数1962. 数值计算

文章目录 一、前言二、问题问题:1389 - 数据分析问题:1750 - 有0的数问题:1457 - 子数整除问题:1121 - “倒”数问题:1962. 数值计算 三、感谢 一、前言 本章节主要对循环中带余除法部分题目进行讲解,包括…

python数据分析-北京市二手住宅市场价格波动分析

一、研究背景: 北京市作为中国的首都和经济中心,房地产市场一直备受关注。二手住宅市场是房地产市场的重要组成部分,其价格波动不仅影响着购房者和卖房者的利益,也对整个经济社会的稳定和发展产生重要影响。因此,对北…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码,如下: 处理办法: 1、打开idea,在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings,如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…