news 2026/4/19 4:11:57

LSTM回归预测:多变量输入,单输出实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LSTM回归预测:多变量输入,单输出实战

LSTM回归预测,多变量输入,单输出。 直接替换数据就可以使用,不需要对程序大幅修改。 程序内有详细注释,便于理解程序运行。 想要点击加好友! 程序可以出真实值和预测值对比图,线性拟合图,可以打印多种评价指标,方便对比分析。

在数据分析与预测的领域中,LSTM(长短期记忆网络)因其对时间序列数据中长短期依赖关系的卓越捕捉能力,备受青睐。今天咱们就来聊聊多变量输入、单输出的LSTM回归预测,而且我会给出一个拿来就能用,稍微替换数据就行的代码示例,里面注释详细,包你轻松理解。文末还有小彩蛋,想要一起交流学习,点击加好友哦!

环境与数据准备

咱们先导入必要的库,像numpy用于数值计算,pandas处理数据,matplotlib绘图,以及tensorflow中的keras搭建LSTM模型。

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import LSTM, Dense from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

假设我们的数据存在一个CSV文件里,文件名为data.csv,数据格式如下:有多列自变量(特征),最后一列为因变量(我们要预测的目标值)。我们用pandas读取数据。

data = pd.read_csv('data.csv') features = data.drop('target_column', axis = 1) target = data['target_column']

数据预处理

为了让LSTM模型更好地学习,我们需要对数据进行归一化处理。这里使用MinMaxScaler将数据缩放到[0, 1]区间。

scaler_features = MinMaxScaler(feature_range=(0, 1)) scaler_target = MinMaxScaler(feature_range=(0, 1)) features_scaled = scaler_features.fit_transform(features) target_scaled = scaler_target.fit_transform(target.values.reshape(-1, 1))

接下来,我们要把数据转换成LSTM模型能接受的输入格式。LSTM模型期望输入的数据是三维的,维度分别是[样本数, 时间步长, 特征数]。假设我们设定时间步长为time_steps

time_steps = 30 X, y = [], [] for i in range(len(features_scaled) - time_steps): X.append(features_scaled[i:i + time_steps]) y.append(target_scaled[i + time_steps]) X = np.array(X) y = np.array(y)

搭建LSTM模型

现在开始搭建简单的LSTM模型,这里就一个LSTM层,然后接一个全连接输出层。

model = Sequential() model.add(LSTM(50, return_sequences=False, input_shape=(time_steps, features.shape[1]))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse')

LSTM层里,50是隐藏单元的数量,returnsequences=False表示我们只返回最后一个时间步的输出,因为我们做的是单输出预测。inputshape则指定了输入数据的形状,也就是(时间步长, 特征数)

模型训练与预测

训练模型很简单,调用fit方法就行。

model.fit(X, y, epochs=50, batch_size=64, verbose=1) # 预测 predicted = model.predict(X)

数据逆归一化与评估

预测完了,我们要把数据还原到原始尺度,这样才能计算真实的评价指标和绘图。

predicted = scaler_target.inverse_transform(predicted) y_actual = scaler_target.inverse_transform(y) # 计算评价指标 mse = mean_squared_error(y_actual, predicted) mae = mean_absolute_error(y_actual, predicted) r2 = r2_score(y_actual, predicted) print(f'Mean Squared Error: {mse}') print(f'Mean Absolute Error: {mae}') print(f'R2 Score: {r2}')

绘图展示

最后,我们绘制真实值和预测值对比图以及线性拟合图,直观看看模型的预测效果。

plt.figure(figsize=(12, 6)) plt.plot(y_actual, label='Actual') plt.plot(predicted, label='Predicted') plt.title('Actual vs Predicted') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.show() plt.figure(figsize=(8, 6)) plt.scatter(y_actual, predicted) plt.plot([y_actual.min(), y_actual.max()], [y_actual.min(), y_actual.max()], 'k--', lw=2) plt.xlabel('Actual') plt.ylabel('Predicted') plt.title('Linear Fit') plt.show()

这样,一个完整的多变量输入、单输出的LSTM回归预测就完成啦!是不是还挺简单的?如果你在使用过程中有任何问题,或者想一起探讨更多有趣的机器学习项目,点击加好友,咱们一起交流呀!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:08:34

基于 51 单片机音乐喷泉频谱灯控制系统设计

一、系统整体设计方案 本系统以 51 单片机为核心控制单元,旨在实现音乐信号、喷泉动作与频谱灯效的协同联动,打造具有视觉与听觉双重体验的多媒体控制系统。设计遵循 “模块化、稳定性、低成本” 原则,将系统划分为四大核心功能模块&#xff…

作者头像 李华
网站建设 2026/4/18 10:50:31

北票市金马除尘破碎机械厂社会保险的缴费负担情况分析

2 企业社会保险的缴费负担分析 2.1 小微企业社会保险的缴费负担分析 如今小微企业的竞争力远不如大中型企业,企业自身资金不充足,资金中转艰难,无人投资,发展前景小,平台少,原材料,人力成本高&…

作者头像 李华
网站建设 2026/4/18 8:53:25

收藏!AI工程师必掌握的5大核心模型架构(小白入门进阶必备)

在当前AI技术爆发的浪潮中,大型语言模型(LLMs)虽常年占据热搜,但要构建真正能落地、能感知世界、能自主执行任务的完整AI系统,仅靠LLM远远不够。一批专门化的核心模型架构,正在悄悄重塑AI应用的底层逻辑。 …

作者头像 李华
网站建设 2026/4/18 8:38:13

1-D 和 2-D 系统事件触发控制指导

1-D、2-D系统事件触发控制指导、 在控制系统领域,1 - D(一维)和 2 - D(二维)系统有着独特的应用场景和控制方式。今天咱们就来深入聊聊它们的事件触发控制。 1 - D 系统事件触发控制 1 - D 系统可以简单理解为沿着单…

作者头像 李华
网站建设 2026/4/17 14:01:21

Docker 新手小白保姆级教程:从安装到基础操作全搞定

作为一名刚接触容器技术的新手,是不是觉得 Docker 又神秘又难学?其实 Docker 的核心逻辑很简单 ——“一次构建,到处运行”,能帮我们解决环境配置不一致、依赖冲突等一系列头疼问题。今天这篇教程,就从各系统安装 Dock…

作者头像 李华
网站建设 2026/4/18 0:24:30

轻量服务器和云服务器的区别

轻量服务器和云服务器区别很大,核心差异在于定位、灵活性、扩展性和适用场景,轻量服务器是简化版云服务器,主打“开箱即用、低成本”,云服务器则是全功能弹性计算产品,覆盖从个人到企业的全场景需求。 一、核心区别对比…

作者头像 李华