京公网安备 11010802034615号
经营许可证编号:京B2-20210330
随着时间序列分析的普及,LSTM 成为了深度学习中最常用的工具之一。它以其优异的性能和对数据的自适应特征提取而闻名。然而,在实际应用中,我们通常需要通过多变量来预测未来时间序列数据。本文将介绍如何使用多变量 LSTM 模型来进行时间序列预测,并且给出一个例子来预测未来一周的气温。
首先,我们需要准备数据集。在本例中,我们将使用包含多个变量的天气数据。这些变量包括温度、湿度、风速、降雨量等。我们将选取最近一年的数据,将其前80%作为训练集,后20%作为测试集。
接下来,我们需要对数据进行归一化处理。由于不同变量之间的值域差异较大,我们需要将其进行缩放到一个相同的范围内。这里我们将使用 Scikit-Learn 库中的MinMaxScaler函数。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
train_data = scaler.fit_transform(train_data)
test_data = scaler.transform(test_data)
接下来,我们需要将数据转换成适合 LSTM 模型的格式。在多变量情况下,我们需要将每个时刻的输入向量扩展到包含多个变量。这里我们将以过去 30 天的数据为输入,预测未来一周的气温。
import numpy as np def create_dataset(X, y, time_steps=1):
Xs, ys = [], [] for i in range(len(X) - time_steps):
v = X[i:i + time_steps]
Xs.append(v)
ys.append(y[i + time_steps]) return np.array(Xs), np.array(ys)
TIME_STEPS = 30 X_train, y_train = create_dataset(train_data, train_data[:, 0], TIME_STEPS)
X_test, y_test = create_dataset(test_data, test_data[:, 0], TIME_STEPS)
接下来,我们可以构建 LSTM 模型。在本例中,我们将使用两层 LSTM 和一个全连接层。模型的输入形状应该是(samples, time_steps, features)。
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM
model = Sequential([
LSTM(units=64, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences=True),
LSTM(units=32, return_sequences=False),
Dense(units=1)])
在训练模型之前,我们需要定义损失函数和优化器,并编译模型。
model.compile(loss='mean_squared_error', optimizer='adam')
现在,我们可以开始训练模型。在每个 epoch 后,我们将记录训练集和测试集上的损失值,并可视化它们的变化。
history = model.fit(
X_train, y_train,
epochs=50,
batch_size=16,
validation_split=0.1,
verbose=1,
shuffle=False) import matplotlib.pyplot as plt
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='test')
plt.legend()
plt.show()
在模型训练完成后,我们可以对测试集进行预测,并将预测结果与真实值进行比较。
y_pred = model.predict(X_test)
plt.plot(y_test, label='true')
plt.plot(y_pred, label='predicted')
plt.legend()
plt.show()
最后,我们将使用训练好的模型来预测未来一周的气温。首先,我们需要获取最近 30 天的数据,然后使用模型进行预测。每次预测完之后,我们将新的预测值添加到输入序列中,用于下一次的预测。
X_last30
= test_data[-TIME_STEPS:] forecast = [] for i in range(7): y_pred_one = model.predict(X_last30.reshape(1, TIME_STEPS, -1)) forecast.append(y_pred_one[0, 0]) X_last30 = np.vstack((X_last30[1:], y_pred_one))
forecast = scaler.inverse_transform(np.array(forecast).reshape(-1, 1))
以上便是使用多变量 LSTM 进行时间序列预测的整个流程。通过训练模型,我们可以获得对未来数据的预测结果,并且不仅仅考虑了单一变量的影响,而是综合了多个变量的影响。当然,这只是一个简单的例子,实际应用中可能会涉及到更加复杂的数据和模型。
相信读完上文,你对算法已经有了全面认识。若想进一步探索机器学习的前沿知识,强烈推荐机器学习之半监督学习课程。
学习入口:https://edu.cda.cn/goods/show/3826?targetId=6730&preview=0
涵盖核心算法,结合多领域实战案例,还会持续更新,无论是新手入门还是高手进阶都很合适。赶紧点击链接开启学习吧!
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在互联网运营、产品优化、用户增长等领域,次日留存率是衡量产品价值、用户粘性与运营效果的核心指标,更是判断新用户是否认可产 ...
2026-05-09相关性分析是数据分析领域中用于探究两个或多个变量之间关联强度与方向的核心方法,广泛应用于科研探索、商业决策、医疗研究、社 ...
2026-05-09 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-05-09在数据驱动运营的时代,指标是连接业务目标与实际行动的核心桥梁,是企业解读业务现状、发现问题、预判趋势的“量化标尺”。一套 ...
2026-05-08在存量竞争日趋激烈的商业时代,“以客户为中心”早已从口号落地为企业运营的核心逻辑。而客户画像作为打通“了解客户”与“服务 ...
2026-05-08 很多数据分析师每天与Excel打交道,但当被问到“什么是表格结构数据”“它和表结构数据有什么区别”“表格结构数据有哪些核 ...
2026-05-08在数据分析、计量研究等场景中,回归分析是探究变量间量化关系的核心方法,无论是简单的一元线性回归,还是复杂的多元线性回归、 ...
2026-05-07在数据分析、计量研究等场景中,回归分析是探究变量间量化关系的核心方法,无论是简单的一元线性回归,还是复杂的多元线性回归、 ...
2026-05-07 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-05-07在数字化时代,商业竞争的核心已从“经验驱动”转向“数据驱动”,越来越多的企业意识到,商业分析不是简单的数据统计与报表呈现 ...
2026-05-06在Excel数据透视表的实操中,“引用”是连接透视表与公式、辅助数据的核心操作,而相对引用作为最基础、最常用的引用方式,其设 ...
2026-05-06 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-05-06在Excel数据分析中,数据透视表是汇总、整理海量数据的高效工具,而公式则是实现数据二次计算、逻辑判断的核心功能。实际操作中 ...
2026-04-30Excel透视图是数据分析中不可或缺的工具,它能将透视表中的数据快速可视化,帮助我们直观捕捉数据规律、呈现分析结果。但在实际 ...
2026-04-30 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-04-30在中介效应分析中,人口统计学变量(如年龄、性别、学历、收入、职业等)是常见的控制变量或调节变量,其处理方式直接影响分析结 ...
2026-04-29在SQL数据库实操中,日期数据的存储与显示是高频需求,而“数字日期”(如20240520、20241231、45321)是很多开发者、数据分析师 ...
2026-04-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-04-29在手游行业竞争日趋白热化的当下,“流量为王”早已升级为“留存为王”,而付费用户留存率更是衡量一款手游盈利能力、运营质量的 ...
2026-04-28在日常MySQL数据库运维与开发中,经常会遇到“同一台服务器上,两个不同数据库(以下简称“源库”“目标库”)的表数据需要保持 ...
2026-04-28