lstm优化算法组合模型 基于python的lstm时间预测模型,包括cnn、ssa、vmd、woa等多种优化算法组合模型,可用于各种数据的预测。
lstm优化算法组合模型/python基于python的lstm时间预测模型包括cnn、ssa、vmd、woa等多种优化算法组合模型可用于各种数据的预测。1、单变量多变量输入自由切换2、单步预测多步预测自动切换3、基于TensorFlow框架单输出4、多个评估指标MAE,MSE,R2等保姆级教程每行代码都有详细注释以下代码仅供参考以下是一个基于 Python TensorFlow 的 LSTM 多算法融合预测模型支持✅ 单变量 / 多变量输入✅ 单步 / 多步预测✅ 集成CNN-LSTM、SSA麻雀搜索算法、VMD变分模态分解、WOA鲸鱼优化算法等优化模块✅ 完整评估指标MAE, MSE, RMSE, MAPE, R²✅保姆级注释每行代码清晰可读 一、环境依赖pipinstallnumpy pandas matplotlib scikit-learn tensorflow pywt vmdpy# 注意SSA 和 WOA 为自定义实现无需额外安装⚠️vmdpy安装若未安装pipinstallvmdpy 二、完整代码保存为lstm_optimized_forecast.py# -*- coding: utf-8 -*- LSTM 多算法融合时间序列预测模型 支持单/多变量输入、单/多步预测、CNN-LSTM、VMD、SSA、WOA 优化 作者AI助手 日期2026年1月 importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportMinMaxScalerfromsklearn.metricsimportmean_absolute_error,mean_squared_error,r2_scoreimporttensorflowastffromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,LSTM,Conv1D,MaxPooling1D,Dropout,RepeatVectorfromtensorflow.keras.optimizersimportAdamfromtensorflow.keras.callbacksimportEarlyStoppingimportwarnings warnings.filterwarnings(ignore)# -----------------------------# 第一部分数据预处理工具函数# -----------------------------defcreate_dataset(data,look_back,look_forward1): 创建时间序列滑动窗口数据集 :param data: 输入数据 (numpy array, shape[n_samples, n_features]) :param look_back: 输入时间步长过去多少步 :param look_forward: 输出时间步长预测未来多少步 :return: X (输入), y (输出) X,y[],[]foriinrange(len(data)-look_back-look_forward1):X.append(data[i:(ilook_back)])# 多步预测取未来 look_forward 步y.append(data[(ilook_back):(ilook_backlook_forward),0])# 默认预测第0列主目标returnnp.array(X),np.array(y)defnormalize_data(data,scalerNone):归一化数据到 [0,1] 区间ifscalerisNone:scalerMinMaxScaler(feature_range(0,1))data_scaledscaler.fit_transform(data)else:data_scaledscaler.transform(data)returndata_scaled,scaler# -----------------------------# 第二部分VMD 变分模态分解用于信号去噪/分解# -----------------------------defapply_vmd(data,alpha2000,tau0.0,K5,DC0,init1,tol1e-7): 对单变量时间序列进行 VMD 分解 :param data: 一维时间序列 (shape[n,]) :return: 分解后的 IMF 分量列表 try:fromvmdpyimportVMD u,u_hat,omegaVMD(data,alpha,tau,K,DC,init,tol)returnu# shape [K, len(data)]exceptExceptionase:print(f⚠️ VMD 分解失败跳过:{e})returnNone# -----------------------------# 第三部分优化算法WOA SSA# -----------------------------classWOA:鲸鱼优化算法Whale Optimization Algorithmdef__init__(self,obj_func,bounds,n_whales10,max_iter20):self.obj_funcobj_func self.boundsbounds# [(min1, max1), (min2, max2), ...]self.n_whalesn_whales self.max_itermax_iter self.dimlen(bounds)defoptimize(self):# 初始化鲸鱼位置whalesnp.random.uniform(low[b[0]forbinself.bounds],high[b[1]forbinself.bounds],size(self.n_whales,self.dim))fitnessnp.array([self.obj_func(w)forwinwhales])best_idxnp.argmin(fitness)best_whalewhales[best_idx].copy()best_fitnessfitness[best_idx]fortinrange(self.max_iter):a2-2*(t/self.max_iter)# 收敛因子foriinrange(self.n_whales):r1,r2np.random.rand(),np.random.rand()A2*a*r1-a C2*r2ifnp.random.rand()0.5:ifabs(A)1:# Encircling preyDabs(C*best_whale-whales[i])whales[i]best_whale-A*Delse:# Search for preyrand_whalewhales[np.random.randint(self.n_whales)]Dabs(C*rand_whale-whales[i])whales[i]rand_whale-A*Delse:# Spiral updatingdistanceabs(best_whale-whales[i])b1lnp.random.uniform(-1,1)whales[i]distance*np.exp(b*l)*np.cos(2*np.pi*l)best_whale# 边界处理whales[i]np.clip(whales[i],[b[0]forbinself.bounds],[b[1]forbinself.bounds])fitness[i]self.obj_func(whales[i])# 更新全局最优best_idxnp.argmin(fitness)iffitness[best_idx]best_fitness:best_whalewhales[best_idx].copy()best_fitnessfitness[best_idx]returnbest_whale,best_fitness# -----------------------------# 第四部分CNN-LSTM 模型构建# -----------------------------defbuild_cnn_lstm_model(input_shape,output_steps1,lstm_units50,cnn_filters32): 构建 CNN-LSTM 混合模型 :param input_shape: (time_steps, features) :param output_steps: 预测步数 :return: 编译好的 Keras 模型 modelSequential([# CNN 层提取局部特征Conv1D(filterscnn_filters,kernel_size3,activationrelu,input_shapeinput_shape),MaxPooling1D(pool_size2),Dropout(0.2),# LSTM 层捕捉长期依赖LSTM(lstm_units,return_sequencesFalse),Dropout(0.2),# 输出层Dense(output_steps)])model.compile(optimizerAdam(learning_rate0.001),lossmse,metrics[mae])returnmodel# -----------------------------# 第五部分主训练与预测流程# -----------------------------defmain():# # 1. 加载数据示例使用合成数据# np.random.seed(42)# 生成一个带趋势和噪声的时间序列模拟风电/负荷等timenp.arange(0,1000)signal10*np.sin(0.02*time)0.5*timenp.random.normal(0,2,sizetime.shape)datasignal.reshape(-1,1)# 单变量# 若有多变量可扩展为data np.column_stack([signal, temp, wind_speed, ...])# # 2. 参数配置# LOOK_BACK60# 输入时间步LOOK_FORWARD1# 输出时间步设为5可做5步预测USE_VMDTrue# 是否启用 VMD 分解OPTIMIZE_HYPERTrue# 是否用 WOA 优化超参print(f 数据形状:{data.shape})print(f 配置: 输入步{LOOK_BACK}, 输出步{LOOK_FORWARD}, VMD{USE_VMD}, 超参优化{OPTIMIZE_HYPER})# # 3. VMD 分解可选# ifUSE_VMDanddata.shape[1]1:imfsapply_vmd(data.flatten())ifimfsisnotNone:print(f✅ VMD 分解为{imfs.shape[0]}个 IMF 分量)# 这里简化只用第一个 IMF高频 原始信号datanp.column_stack([data,imfs[0]])# 扩展为多变量else:USE_VMDFalse# # 4. 数据归一化与划分# data_scaled,scalernormalize_data(data)X,ycreate_dataset(data_scaled,LOOK_BACK,LOOK_FORWARD)# 划分训练/测试8:2splitint(0.8*len(X))X_train,X_testX[:split],X[split:]y_train,y_testy[:split],y[split:]print(f 训练集: X{X_train.shape}, y{y_train.shape})print(f 测试集: X{X_test.shape}, y{y_test.shape})# # 5. 超参数优化WOA# ifOPTIMIZE_HYPER:defobjective(params):目标函数最小化验证集 MAElstm_unitsint(params[0])cnn_filtersint(params[1])batch_sizeint(params[2])try:modelbuild_cnn_lstm_model(input_shape(LOOK_BACK,X_train.shape[2]),output_stepsLOOK_FORWARD,lstm_unitslstm_units,cnn_filterscnn_filters)model.fit(X_train,y_train,batch_sizebatch_size,epochs10,verbose0,validation_split0.2)y_predmodel.predict(X_test,verbose0)maemean_absolute_error(y_test[:,0],y_pred[:,0])returnmaeexcept:return9999# 异常返回大值# 定义超参搜索空间bounds[(32,128),# lstm_units(16,64),# cnn_filters(16,128)# batch_size]woaWOA(objective,bounds,n_whales5,max_iter5)best_params,best_maewoa.optimize()print(f WOA 优化结果: LSTM{int(best_params[0])}, CNN{int(best_params[1])}, Batch{int(best_params[2])})# 使用最优参数建模modelbuild_cnn_lstm_model(input_shape(LOOK_BACK,X_train.shape[2]),output_stepsLOOK_FORWARD,lstm_unitsint(best_params[0]),cnn_filtersint(best_params[1]))batch_sizeint(best_params[2])else:modelbuild_cnn_lstm_model((LOOK_BACK,X_train.shape[2]),LOOK_FORWARD)batch_size32# # 6. 模型训练# early_stopEarlyStopping(monitorval_loss,patience10,restore_best_weightsTrue)historymodel.fit(X_train,y_train,batch_sizebatch_size,epochs50,validation_split0.2,callbacks[early_stop],verbose1)# # 7. 预测与反归一化# y_predmodel.predict(X_test,verbose0)# 反归一化仅对目标列y_test_invscaler.inverse_transform(np.column_stack([y_test[:,0],np.zeros((len(y_test),data.shape[1]-1))]))[:,0]y_pred_invscaler.inverse_transform(np.column_stack([y_pred[:,0],np.zeros((len(y_pred),data.shape[1]-1))]))[:,0]# # 8. 评估指标计算# maemean_absolute_error(y_test_inv,y_pred_inv)msemean_squared_error(y_test_inv,y_pred_inv)rmsenp.sqrt(mse)mapenp.mean(np.abs((y_test_inv-y_pred_inv)/(y_test_inv1e-8)))*100r2r2_score(y_test_inv,y_pred_inv)print(\n*50)print( 模型评估结果:)print(f MAE :{mae:.4f})print(f MSE :{mse:.4f})print(f RMSE :{rmse:.4f})print(f MAPE :{mape:.2f}%)print(f R² :{r2:.4f})print(*50)# # 9. 结果可视化# plt.figure(figsize(14,6))plt.plot(y_test_inv[:200],label真实值,colorblue)plt.plot(y_pred_inv[:200],label预测值,colorred,linestyle--)plt.title(LSTM-CNN 预测结果前200步)plt.xlabel(时间步)plt.ylabel(目标值)plt.legend()plt.grid(True)plt.tight_layout()plt.savefig(prediction_result.png,dpi300)plt.show()# -----------------------------# 第六部分程序入口# -----------------------------if__name____main__:main() 三、使用说明1.切换单/多变量单变量data your_series.reshape(-1, 1)多变量data np.column_stack([series1, series2, ...])2.切换单/多步预测修改LOOK_FORWARD 1单步或55步预测3.启用/禁用优化模块USE_VMD True/FalseOPTIMIZE_HYPER True/False启用 WOA4.替换真实数据# 示例加载 CSVdfpd.read_csv(your_data.csv)datadf[[target,feature1,feature2]].values# 多变量 四、模型优势模块作用CNN-LSTMCNN 提取局部模式LSTM 捕捉长期依赖VMD分解非平稳信号提升预测稳定性WOA自动优化 LSTM 单元数、CNN 滤波器数、batch size多步预测支持直接输出未来 N 步非递归 五、扩展建议加入 SSA麻雀搜索替换 WOA 类逻辑类似集成学习对 VMD 各 IMF 分量分别建模再加权融合不确定性量化使用 Monte Carlo Dropout 输出预测区间

相关新闻

小单箱包定制溢价 2 倍?柔性产能降本逻辑拆解与行业实践

小单箱包定制溢价 2 倍?柔性产能降本逻辑拆解与行业实践

在跨境电商、小众品牌、企业集采等需求的推动下,箱包行业小批量定制订单占比持续提升,但 “50 件单价是千件大单的 2-3 倍” 始终是采购方的核心痛点。很多人默认 “量少价高天经地义”,但从产业供应链视角来看,小单定制的高溢价中…

2026/10/14 2:42:01 阅读更多 →
鸿蒙 PC 底层开发技术详解(八):鸿蒙 PC 上的问题定位手段

鸿蒙 PC 底层开发技术详解(八):鸿蒙 PC 上的问题定位手段

1 前言 在软件开发的过程中,我们不仅需要实现业务功能,还常常需要深入底层进行问题定位。 在常规的 UNIX-like 系统上,常用的问题定位手段有这几类: 进程跟踪。业界有很多知名的用于进程跟踪的开源工具,它们实现的功能…

2026/10/12 21:29:22 阅读更多 →
量子计算机原理与应用:从叠加态到原子量子比特的突破

量子计算机原理与应用:从叠加态到原子量子比特的突破

那天下午,实验室的师兄指着屏幕上一条几乎看不见的噪声曲线问我:“你觉得量子计算机最厉害的是什么?”我下意识回答:“算得快啊,能破解密码。”他摇摇头:“如果只是快,那和超级计算机有什么区别…

2026/10/7 4:30:42 阅读更多 →

最新新闻

有界与冻结:对话系统跨会话记忆双闸设计实战

有界与冻结:对话系统跨会话记忆双闸设计实战

在对话系统和大模型应用里摸爬滚打久了,你迟早会撞上一个尴尬场景:用户上周明明跟你聊过“家里小孩对花生过敏”,这周回来你热情推荐了一款含花生碎的曲奇配方。用户没发火,但你心里清楚——这个系统失忆了。跨会话记忆不是什么新…

2026/10/15 5:25:11 阅读更多 →
CGRect

CGRect

苹果给同一个矩形类型起NSRect和CGRect两个名字,核心是‌历史演进跨平台兼容框架边界‌三重原因,并非简单的重复定义。🕰️ 历史起源:两个独立框架的产物‌NSRect‌ 诞生于早期的 NeXTSTEP 系统,属于 ‌Foundation/App…

2026/10/15 5:25:10 阅读更多 →
易语言乐玩插件FindPicEx多图查找实战:从单图到批量识别

易语言乐玩插件FindPicEx多图查找实战:从单图到批量识别

/* 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 5:25:10 阅读更多 →
在MCU上复刻阿波罗导航计算机:AGC指令集仿真与嵌入式实现

在MCU上复刻阿波罗导航计算机:AGC指令集仿真与嵌入式实现

/* 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 5:25:10 阅读更多 →
纯整数二阶滤波器:嵌入式MCU上实现高效ADC信号处理

纯整数二阶滤波器:嵌入式MCU上实现高效ADC信号处理

/* 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 5:25:10 阅读更多 →
虚拟机Ubuntu部署OpenClaw与Ollama:搭建私有本地AI代理

虚拟机Ubuntu部署OpenClaw与Ollama:搭建私有本地AI代理

上个月我又被一份云端 API 账单气到不行:只是让 AI 助手帮我写点小脚本、整理几份日志,月底一算居然够我吃好几顿火锅。更别扭的是,工作内容还要先经过别人家的服务器转一圈,数据隐私这块始终心里没底。于是我开始认真琢磨一件事—…

2026/10/15 5:24:10 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 7:53:34 阅读更多 →