基于Python的LSTM网络实现单特征预测回归任务

news/2024/11/16 13:31:56/

长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的递归神经网络(RNN),适用于处理时间序列数据和其他序列数据的预测问题。它特别适合处理具有时间依赖性和长期依赖关系的序列数据。

以下是基于Python和Keras库的LSTM网络实现单特征预测回归任务的详细代码介绍:

python">import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split# 加载数据
# 在这里,我们假设你有一个CSV文件 'data.csv',其中有两个列:'date' 和 'value'
data = pd.read_csv('data.csv')
data['date'] = pd.to_datetime(data['date'])# 将数据按时间排序
data.sort_values(by='date', inplace=True)# 提取单一特征
feature = data['value'].values# 将数据缩放到0到1之间
scaler = MinMaxScaler(feature_range=(0, 1))
feature_scaled = scaler.fit_transform(feature.reshape(-1, 1))# 准备数据
def prepare_data(feature, look_back=1):X, y = [], []for i in range(len(feature) - look_back):X.append(feature[i:i + look_back])y.append(feature[i + look_back])return np.array(X), np.array(y)look_back = 10  # 选择过去多少个时间步作为输入
X, y = prepare_data(feature_scaled, look_back)# 划分训练和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 将输入数据重新调整为LSTM所需的三维数组格式
# 格式为 (样本数量, 时间步, 特征数量)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))# 创建LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(look_back, 1)))
model.add(Dense(1))# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))# 预测
y_pred = model.predict(X_test)# 将预测结果反缩放
y_pred_inv = scaler.inverse_transform(y_pred)
y_test_inv = scaler.inverse_transform(y_test)# 评估模型
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test_inv, y_pred_inv)
print("均方误差 (MSE):", mse)# 可视化结果
import matplotlib.pyplot as pltplt.plot(data['date'].iloc[-len(y_test):], y_test_inv, label='真实值')
plt.plot(data['date'].iloc[-len(y_test):], y_pred_inv, label='预测值')
plt.legend()
plt.show()

以下是代码中各个部分的介绍:

  • 数据加载和预处理:代码开始通过pandas加载数据,并将其按时间排序。然后提取所需的特征,将数据缩放到0到1之间,以确保模型的稳定性。

  • 准备数据prepare_data函数将数据转换为训练和预测所需的格式,主要是通过滑动窗口机制,将时间序列数据转换为输入和目标的组合。

  • 模型创建和编译:创建了一个简单的LSTM模型,包括一个LSTM层和一个Dense层。模型使用adam优化器和均方误差作为损失函数。

  • 训练模型:通过调用model.fit,训练模型,并指定训练数据、验证数据、批次大小和训练轮次。

  • 预测和评估:在测试集上进行预测,将预测结果反缩放到原始值,然后计算均方误差(MSE)。最后,通过可视化比较预测值和真实值。

该代码示例展示了如何使用LSTM模型进行时间序列数据的预测任务。通过调整模型的超参数和层数,你可以优化模型以更好地适应你的数据和任务。


http://www.ppmy.cn/news/1456096.html

相关文章

Redis领航分布式:Java实现高效Session管理

在构建分布式系统时,用户的会话管理是一个至关重要的问题。传统的基于服务器的会话管理方案可能会面临单点故障和性能瓶颈等问题。 而基于 Redis 的分布式会话管理方案能够有效地解决这些问题,并提供高可用性和性能。 本文将深入探讨 Redis 实现分布式…

从简单逻辑到复杂计算:感知机的进化与其在现代深度学习和人工智能中的应用(上)

文章目录 引言第一章:感知机是什么第二章:简单逻辑电路第三章:感知机的实现3.1 简单的与门实现3.2 导入权重和偏置3.3 使用权重和偏置的实现实现与门实现与非门和或门 文章文上下两节 从简单逻辑到复杂计算:感知机的进化与其在现代…

【Java】Stream流、方法引用(Java8)

Stream流 中间方法 distinct() 使用HashSet去重 终结方法 toArray() value 表示 流中数据的个数,要跟数组的长度保持一致。 collect() 收集到map中,比较复杂。需要指定 键 和 值 的生成规则。 方法引用 01_引用静态方法 ​ 引用类方法,其实…

leetcode---岛屿数量

. - 力扣(LeetCode) 代码: //岛屿题目的思想:二维矩阵图的DFS就是,上下左右遍历如果是0或者出界的话就return //规定的是陆地上下左右是水的话它就是岛屿。当遍历矩阵图中每一个点, //在调用递归算法之前…

互斥量理论基础

文章目录 一、互斥量理论基础 一、互斥量理论基础 在多任务系统中,任务A正在使用某个资源,还没用完的情况下任务B也来使用的话,就会出问题。这时就需要互斥量(互斥锁),使用过程如下: 互斥量初始…

python操作minio中常见错误

因为我参考minio的文档操作,当时文档并不是很详细,这篇博文会统一记录自己所遇到的问题。以下的每个标题都是具体的错误信息。 minio-py文档 错误1:SSL: WRONG_VERSION_NUMBER 这个错误的原因是在创建minio的客户端时候没有关闭SSL,请使用如…

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW,GA,PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

自动驾驶主流芯片及平台架构(二)特斯拉自动驾驶芯片平台介绍

早期 对外采购mobileye EyeQ3 芯片摄像头半集成方案,主要是为了满足快速量产需求,且受制于研发资金不足限制; 中期 采用高算力NVIDIA 芯片平台其他摄像头供应商的特斯拉内部集成方案,mobileye开发节奏无法紧跟特斯拉需求&#xff…