潜江市网站建设_网站建设公司_导航菜单_seo优化
2025/12/24 15:55:49 网站建设 项目流程

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回归预测就完成啦!是不是还挺简单的?如果你在使用过程中有任何问题,或者想一起探讨更多有趣的机器学习项目,点击加好友,咱们一起交流呀!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询