基于经验模态分解 时序分析 核主成分分析 长短期记忆网络 多维时间序列预测 LSTM多维时间序列预测模型 LSTM和 MD-LSTM进行对比
EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测MATLAB代码含LSTM、EMD-LSTM、EMD-KPCA-LSTM三个模型的对比matlab参考文档基于EMD-PCA-LSTM的光伏功率预测模型研究内容本案例使用数据集是北半球光伏功率共四个输入特征太阳辐射度 气温 气压 大气湿度一个输出预测光伏功率; 预测对象可以是电力负荷、风速、光伏等等时间序列数据集;代码注释清楚可以读取本地EXCEL数据**以下代码仅供参考**实现基于EMD-KPCA-LSTM的多维时间序列预测模型并与LSTM和EMD-LSTM进行对比。以下是详细的步骤和代码。环境准备确保您已经安装了MATLAB并且具有以下工具箱Statistics and Machine Learning ToolboxSignal Processing ToolboxNeural Network Toolbox数据加载与预处理我需要加载和预处理数据。假设的数据存储在一个Excel文件中包含四个输入特征太阳辐射度、气温、气压、大气湿度和一个输出特征光伏功率。以下是数据加载和预处理的脚本data_preprocessing.m:[titleData Preprocessing ScriptforSolar Power Prediction]% Define pathsexcelFilePathdatasets/solar_power_data.xlsx;% Load data from ExcelrawDatareadtable(excelFilePath);% Convert table to matrixdataMatrixtable2array(rawData);% Normalize the features[numRows,numCols]size(dataMatrix);XdataMatrix(:,1:numCols-1);% Input featuresydataMatrix(:,numCols);% Output feature (Solar Power)% Min-Max normalizationminValsmin(X);maxValsmax(X);X_normalized(X-minVals)./(maxVals-minVals);% Split data into training, validation, and test setstrainRatio0.7;valRatio0.15;testRatio0.15;numTrainSamplesfloor(trainRatio*numRows);numValSamplesfloor(valRatio*numRows);numTestSamplesnumRows-numTrainSamples-numValSamples;X_trainX_normalized(1:numTrainSamples,:);y_trainy(1:numTrainSamples);X_valX_normalized(numTrainSamples1:numTrainSamplesnumValSamples,:);y_valy(numTrainSamples1:numTrainSamplesnumValSamples);X_testX_normalized(numTrainSamplesnumValSamples1:end,:);y_testy(numTrainSamplesnumValSamples1:end);% Save preprocessed datasave(preprocessed_datasets/preprocessed_data.mat,X_train,y_train,X_val,y_val,X_test,y_test);disp(Preprocessed data saved to: preprocessed_datasets/preprocessed_data.mat);EMD分解接下来我们使用经验模态分解EMD来分解输入信号。以下是EMD分解的脚本emd_decomposition.m:[titleEMD Decomposition Script]% Load preprocessed dataload(preprocessed_datasets/preprocessed_data.mat);% Apply EMD to each input feature[X_emd_train,imfsTrain]emd_decompose_features(X_train);[X_emd_val,imfsVal]emd_decompose_features(X_val);[X_emd_test,imfsTest]emd_decompose_features(X_test);% Save decomposed datasave(preprocessed_datasets/emd_decomposed_data.mat,X_emd_train,imfsTrain,X_emd_val,imfsVal,X_emd_test,imfsTest);disp(EMD decomposed data saved to: preprocessed_datasets/emd_decomposed_data.mat);function[X_emd,imfs]emd_decompose_features(X)[~,numFeatures]size(X);X_emdzeros(size(X));imfscell(numFeatures,1);fori1:numFeatures imfComponentsemd(X(:,i));imfs{i}imfComponents;X_emd(:,i)sum(imfComponents);endendKPCA降维接下来我们使用核主成分分析KPCA对EMD分解后的数据进行降维。以下是KPCA降维的脚本kpca_reduction.m:[titleKPCA Reduction Script]% Load EMF decomposed dataload(preprocessed_datasets/emd_decomposed_data.mat);% Apply KPCA to each input feature[X_kpca_train,kpcaModels]kpca_reduce_features(X_emd_train);[X_kpca_val,~]kpca_reduce_features(X_emd_val,kpcaModels);[X_kpca_test,~]kpca_reduce_features(X_emd_test,kpcaModels);% Save reduced datasave(preprocessed_datasets/kpca_reduced_data.mat,X_kpca_train,X_kpca_val,X_kpca_test);disp(KPCA reduced data saved to: preprocessed_datasets/kpca_reduced_data.mat);function[X_kpca,models]kpca_reduce_features(X,existingModels)[~,numFeatures]size(X);X_kpcazeros(size(X));modelscell(numFeatures,1);fori1:numFeaturesifnargin1||isempty(existingModels{i})kpcaModelkpca(X(:,i), KernelFunction,rbf,NumComponents,2);models{i}kpcaModel;elsekpcaModelexistingModels{i};endX_kpca(:,i)predict(kpcaModel,X(:,i));endendLSTM模型训练我们将分别训练三种模型LSTM、EMD-LSTM和EMD-KPCA-LSTM。以下是LSTM模型训练的脚本lstm_training.m:[titleLSTM Training Script]% Load preprocessed dataload(preprocessed_datasets/preprocessed_data.mat);% Prepare sequences for LSTMsequenceLength24;% Example sequence length of 24 time steps[X_seq_train,y_seq_train]prepare_sequences(X_train,y_train,sequenceLength);[X_seq_val,y_seq_val]prepare_sequences(X_val,y_val,sequenceLength);[X_seq_test,y_seq_test]prepare_sequences(X_test,y_test,sequenceLength);% Train LSTM modellayers[sequenceInputLayer(sequenceLength,NumFeaturesnumel(X_train,2))lstmLayer(100)fullyConnectedLayer(1)regressionLayer];optionstrainingOptions(adam,...MaxEpochs,50,...GradientThreshold,1,...InitialLearnRate,0.005,...LearnRateSchedule,piecewise,...LearnRateDropFactor,0.2,...LearnRateDropPeriod,50,...Verbose,0,...Plots,training-progress);nettrainNetwork(X_seq_train,y_seq_train,layers,options);% Evaluate LSTM modely_pred_lstmnet.predict(X_seq_test);mse_lstmmean((y_pred_lstm-y_seq_test).^2);rmse_lstmsqrt(mse_lstm);fprintf(LSTM Model RMSE: %.4f\n,rmse_lstm);% Save trained modelsave(trained_models/lstm_model.mat,net);disp(LSTM model saved to: trained_models/lstm_model.mat);function[X_seq,y_seq]prepare_sequences(X,y,seqLen)numSamplesnumel(y)-seqLen1;X_seqcell(numSamples,1);y_seqzeros(numSamples,1);fori1:numSamples X_seq{i}X(i:iseqLen-1,:);y_seq(i)y(iseqLen-1);endendEMD-LSTM模型训练以下是EMD-LSTM模型训练的脚本emd_lstm_training.m:[titleEMD-LSTM Training Script]% Load EMD decomposed dataload(preprocessed_datasets/emd_decomposed_data.mat);% Prepare sequences for EMD-LSTMsequenceLength24;% Example sequence length of 24 time steps[X_seq_train,y_seq_train]prepare_sequences(X_emd_train,y_train,sequenceLength);[X_seq_val,y_seq_val]prepare_sequences(X_emd_val,y_val,sequenceLength);[X_seq_test,y_seq_test]prepare_sequences(X_emd_test,y_test,sequenceLength);% Train EMD-LSTM modellayers[sequenceInputLayer(sequenceLength,NumFeaturesnumel(X_emd_train,2))lstmLayer(100)fullyConnectedLayer(1)regressionLayer];optionstrainingOptions(adam,...MaxEpochs,50,...GradientThreshold,1,...InitialLearnRate,0.005,...LearnRateSchedule,piecewise,...LearnRateDropFactor,0.2,...LearnRateDropPeriod,50,...Verbose,0,...Plots,training-progress);net_emdtrainNetwork(X_seq_train,y_seq_train,layers,options);% Evaluate EMD-LSTM modely_pred_emd_lstmnet_emd.predict(X_seq_test);mse_emd_lstmmean((y_pred_emd_lstm-y_seq_test).^2);rmse_emd_lstmsqrt(mse_emd_lstm);fprintf(EMD-LSTM Model RMSE: %.4f\n,rmse_emd_lstm);% Save trained modelsave(trained_models/emd_lstm_model.mat,net_emd);disp(EMD-LSTM model saved to: trained_models/emd_lstm_model.mat);function[X_seq,y_seq]prepare_sequences(X,y,seqLen)numSamplesnumel(y)-seqLen1;X_seqcell(numSamples,1);y_seqzeros(numSamples,1);fori1:numSamples X_seq{i}X(i:iseqLen-1,:);y_seq(i)y(iseqLen-1);endendEMD-KPCA-LSTM模型训练以下是EMD-KPCA-LSTM模型训练的脚本emd_kpca_lstm_training.m:[titleEMD-KPCA-LSTM Training Script]% Load KPCA reduced dataload(preprocessed_datasets/kpca_reduced_data.mat);% Prepare sequences for EMD-KPCA-LSTMsequenceLength24;% Example sequence length of 24 time steps[X_seq_train,y_seq_train]prepare_sequences(X_kpca_train,y_train,sequenceLength);[X_seq_val,y_seq_val]prepare_sequences(X_kpca_val,y_val,sequenceLength);[X_seq_test,y_seq_test]prepare_sequences(X_kpca_test,y_test,sequenceLength);% Train EMD-KPCA-LSTM modellayers[sequenceInputLayer(sequenceLength,NumFeaturesnumel(X_kpca_train,2))lstmLayer(100)fullyConnectedLayer(1)regressionLayer];optionstrainingOptions(adam,...MaxEpochs,50,...GradientThreshold,1,...InitialLearnRate,0.005,...LearnRateSchedule,piecewise,...LearnRateDropFactor,0.2,...LearnRateDropPeriod,50,...Verbose,0,...Plots,training-progress);net_emd_kpcatrainNetwork(X_seq_train,y_seq_train,layers,options);% Evaluate EMD-KPCA-LSTM modely_pred_emd_kpca_lstmnet_emd_kpca.predict(X_seq_test);mse_emd_kpca_lstmmean((y_pred_emd_kpca_lstm-y_seq_test).^2);rmse_emd_kpca_lstmsqrt(mse_emd_kpca_lstm);fprintf(EMD-KPCA-LSTM Model RMSE: %.4f\n,rmse_emd_kpca_lstm);% Save trained modelsave(trained_models/emd_kpca_lstm_model.mat,net_emd_kpca);disp(EMD-KPCA-LSTM model saved to: trained_models/emd_kpca_lstm_model.mat);function[X_seq,y_seq]prepare_sequences(X,y,seqLen)numSamplesnumel(y)-seqLen1;X_seqcell(numSamples,1);y_seqzeros(numSamples,1);fori1:numSamples X_seq{i}X(i:iseqLen-1,:);y_seq(i)y(iseqLen-1);endend结果比较最后我们将比较三种模型的预测结果。以下是结果比较的脚本result_comparison.m:[titleResult Comparison Script]% Load preprocessed dataload(preprocessed_datasets/preprocessed_data.mat);% Load trained modelsload(trained_models/lstm_model.mat);load(trained_models/emd_lstm_model.mat);load(trained_models/emd_kpca_lstm_model.mat);% Prepare sequences for testingsequenceLength24;% Example sequence length of 24 time steps[X_seq_test,y_seq_test]prepare_sequences(X_test,y_test,sequenceLength);% Predict using LSTM modely_pred_lstmnet.predict(X_seq_test);% Predict using EMD-LSTM modely_pred_emd_lstmnet_emd.predict(X_seq_test);% Predict using EMD-KPCA-LSTM modely_pred_emd_kpca_lstmnet_emd_kpca.predict(X_seq_test);% Calculate RMSE for each modelmse_lstmmean((y_pred_lstm-y_seq_test).^2);rmse_lstmsqrt(mse_lstm);mse_emd_lstmmean((y_pred_emd_lstm-y_seq_test).^2);rmse_emd_lstmsqrt(mse_emd_lstm);mse_emd_kpca_lstmmean((y_pred_emd_kpca_lstm-y_seq_test).^2);rmse_emd_kpca_lstmsqrt(mse_emd_kpca_lstm);fprintf(LSTM Model RMSE: %.4f\n,rmse_lstm);fprintf(EMD-LSTM Model RMSE: %.4f\n,rmse_emd_lstm);fprintf(EMD-KPCA-LSTM Model RMSE: %.4f\n,rmse_emd_kpca_lstm);% Plot predictions vs actual valuesfigure;plot(y_seq_test,b,DisplayName,Actual);hold on;plot(y_pred_lstm,r--,DisplayName,LSTM);plot(y_pred_emd_lstm,g-.,DisplayName,EMD-LSTM);plot(y_pred_emd_kpca_lstm,m:,DisplayName,EMD-KPCA-LSTM);xlabel(Time Steps);ylabel(Solar Power);title(Comparison of Models);legend show;grid on;function[X_seq,y_seq]prepare_sequences(X,y,seqLen)numSamplesnumel(y)-seqLen1;X_seqcell(numSamples,1);y_seqzeros(numSamples,1);fori1:numSamples X_seq{i}X(i:iseqLen-1,:);y_seq(i)y(iseqLen-1);endend使用说明配置路径确保datasets/solar_power_data.xlsx文件存在并且包含所需的列。确保所有文件名和路径与脚本中的路径一致。运行脚本在MATLAB命令窗口中依次运行以下脚本data_preprocessing.memd_decomposition.mkpca_reduction.mlstm_training.memd_lstm_training.memd_kpca_lstm_training.mresult_comparison.m注意事项确保所有必要的工具箱已安装特别是Statistics and Machine Learning Toolbox,Signal Processing Toolbox, 和Neural Network Toolbox。根据需要调整参数如sequenceLength,MaxEpochs,InitialLearnRate等。示例假设您的数据文件夹结构如下datasets/ └── solar_power_data.xlsx并且solar_power_data.xlsx包含五个列太阳辐射度、气温、气压、大气湿度、光伏功率。运行上述脚本后您可以查看各种图表和预测结果。总结我们可以构建一个全面的时间序列预测系统包括数据加载、预处理、EMD分解、KPCA降维以及LSTM、EMD-LSTM和EMD-KPCA-LSTM模型的训练和评估。以下是所有相关的代码文件数据预处理脚本(data_preprocessing.m)EMD分解脚本(emd_decomposition.m)KPCA降维脚本(kpca_reduction.m)LSTM训练脚本(lstm_training.m)EMD-LSTM训练脚本(emd_lstm_training.m)EMD-KPCA-LSTM训练脚本(emd_kpca_lstm_training.m)结果比较脚本(result_comparison.m)

相关新闻

[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)

[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)

自己总结platform_device与platform_driver的匹配分为如下三种情况:基于设备树风格的匹配:platform_driver.device_driver.of_device_id->compatible 和 设备树中的compatible属性进行比较;匹配 id 表(id_table),即…

2026/9/29 19:42:31 阅读更多 →
nmap的使用

nmap的使用

Nmap(全称Network Mapper)是一款功能强大、界面简洁清晰的连接端口扫描软件。能够轻松扫描确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统,从而帮助用户管理网络以及评估网络系统安全!Nmap运行需要用到一个驱动程序WinPcap&am…

2026/10/15 7:29:30 阅读更多 →
经典CNN和GAN论文代码总结(未完待续... ...)

经典CNN和GAN论文代码总结(未完待续... ...)

经典CNN 经典GAN GAN Paper: https://arxiv.org/abs/1906.01529Code: https://github.com/sheqi/GAN_Review CGAN Paper: https://arxiv.org/abs/1411.1784Code: <> CycleGAN Paper: https://arxiv.org/abs/1703.10593v6Code: <> CoGAN Paper: https://arxiv.org…

2026/10/14 11:33:57 阅读更多 →

最新新闻

ORA-12154排查全攻略:TNS解析原理与Python cx_Oracle连接实践

ORA-12154排查全攻略:TNS解析原理与Python cx_Oracle连接实践

上周有个同事跑过来&#xff0c;说自己的数据同步脚本突然连不上库了&#xff0c;Python里抛出的错误就一行&#xff1a;ORA-12154: TNS: 无法解析指定的连接标识符。他百思不得其解——自己在数据库管理工具里用同样的用户名、密码和服务名都能连&#xff0c;代码这段时间也没…

2026/10/15 20:06:30 阅读更多 →
SVM支持向量机实战:基于sklearn红酒数据集分类与调参详解

SVM支持向量机实战:基于sklearn红酒数据集分类与调参详解

前阵子把手头一个支持向量机分类项目收了个尾&#xff0c;项目文件名就叫“SVM支持向量机sklearn-wine红酒数据集代码V1”。这版代码没有神经网络&#xff0c;没有复杂特征工程&#xff0c;就是标准的加载数据、样本切分、训练模型、评估效果四步走&#xff0c;但恰恰是这套最朴…

2026/10/15 20:06:30 阅读更多 →
Jupyter QtConsole:轻量级Python交互式编程的隐藏利器

Jupyter QtConsole:轻量级Python交互式编程的隐藏利器

1. 为什么我还在用这个"老古董"写Python第一次跟人聊起Jupyter QtConsole&#xff0c;对方的表情通常是"啊&#xff1f;那玩意儿不是十年前的东西吗"。确实&#xff0c;现在打开任何一个技术社区&#xff0c;满屏都是VS Code、Cursor、PyCharm的讨论&#…

2026/10/15 20:06:30 阅读更多 →
Verilog generate语法详解:从重复例化到条件生成的工程实践

Verilog generate语法详解:从重复例化到条件生成的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 20:06:30 阅读更多 →
C++类设计实战:从Point到Rectangle,避开组合与值语义的坑

C++类设计实战:从Point到Rectangle,避开组合与值语义的坑

1. 从坐标点到矩形&#xff1a;一个看似简单的类设计练习&#xff0c;藏着多少坑"C创建Point类表示坐标点&#xff0c;点构线线构矩形"——这个标题看起来像是课本上的一道课后习题&#xff0c;但我跟你讲&#xff0c;真动手写起来&#xff0c;能踩的坑远比想象中多。…

2026/10/15 20:06:30 阅读更多 →
Apollo 11.0:面向车规级量产的自动驾驶仿真与通信架构解析

Apollo 11.0:面向车规级量产的自动驾驶仿真与通信架构解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 20:05:29 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时&#xff0c;网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上&#xff0c;依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里&#xff0c;扩缩容到底难在哪做过大模型推理服务部署的人&#xff0c;大概都经历过这样的场景&#xff1a;一个团队共用一套推理集群&#xff0c;A 业务跑的是 7B 的小模型&#xff0c;B 业务跑的是 72B 的大模型&#xff0c;C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子&#xff1a;一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减&#xff0c;为了把启动时间压进两秒以内&#xff0c;我手贱地把一串自认为“没用”的 systemd 服务给 disable 了&#xff0c;其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →