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

本文主要是介绍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

这篇关于Adaboost集成学习 | Matlab实现基于CNN-LSTM-Adaboost集成学习时间序列预测(股票价格预测)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、