news 2026/6/23 9:31:05

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/6/18 21:03:55

利用底层注入技术实现企业微信主动发送外部群消息

在针对企业微信 PC 端进行自动化开发时,传统的 UI 模拟(如点击、拖拽)虽然简单,但在处理高频、大规模的外部群主动触达时,往往存在效率低下、窗口干扰等问题。为了实现更高效、更稳定的主动调用能力,通过底…

作者头像 李华
网站建设 2026/6/9 22:49:54

Qwen3-VL-4B-FP8:高效多模态模型新选择

Qwen3-VL-4B-FP8:高效多模态模型新选择 【免费下载链接】Qwen3-VL-4B-Instruct-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-4B-Instruct-FP8 多模态大模型领域再添新成员——Qwen3-VL-4B-Instruct-FP8(以下简称Qwen3-VL…

作者头像 李华
网站建设 2026/6/21 12:43:49

Open-AutoGLM与微信零集成的背后(深度技术拆解,99%的人不知道)

第一章:Open-AutoGLM与微信零集成的背后在人工智能与即时通讯深度融合的当下,Open-AutoGLM 作为一款开源的自动对话生成模型,正逐步成为企业级微信生态集成的新选择。其核心优势在于无需侵入式开发即可实现与微信客户端的“零集成”&#xff…

作者头像 李华
网站建设 2026/6/15 21:07:06

基于 STM32 的安全通风控制系统

1. 引言 :安全通风控制系统的设计背景与意义 在工业生产(如化工车间、喷漆车间)、科研实验(如化学实验室)、家庭生活(如厨房、卫生间)等场景中,有害气体(如甲醛、一氧化碳…

作者头像 李华
网站建设 2026/6/15 20:13:40

昆虫细胞表达系统

昆虫细胞表达系统主要基于杆状病毒表达载体系统(Baculovirus Expression Vector Systems, BEVS),这是一个二元系统。该系统包括两个主要部分:一是病毒感染的昆虫宿主,通常是鳞翅目昆虫细胞系,如Sf9或HighFi…

作者头像 李华