利用LSTM进行回归预测

 

LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN, Recurrent Neural Network)架构,它在1997年由Hochreiter和Schmidhuber提出。LSTM设计用来解决标准RNN在处理长序列数据时遇到的长期依赖问题,即随着时间的推移,RNN会逐渐丧失对早期信息的记忆能力。

LSTM的关键特点包括:

  1. 三个门(Three Gates):

    • 遗忘门(Forget Gate): 决定哪些信息将从细胞状态中被遗忘。
    • 输入门(Input Gate): 决定哪些新的信息将被存储在细胞状态中。
    • 输出门(Output Gate): 决定下一个隐藏状态将如何利用当前的细胞状态。
  2. 细胞状态(Cell State):

    • 细胞状态是LSTM网络中的一个非常重要的概念,它负责携带有关观察到的输入序列的信息。它可以通过遗忘门和输入门进行更新。
  3. 隐藏状态(Hidden State):

    • 隐藏状态是LSTM网络的输出,它包含了当前时间步的信息,并传递给下一个时间步的LSTM单元。
  4. 参数共享(Parameter Sharing):

    • 在LSTM中,所有的时间步共享相同的权重参数。

LSTM的工作原理:

  1. 遗忘门: 基于当前输入和上一个时间步的隐藏状态,遗忘门将决定哪些信息将从细胞状态中被移除。遗忘门是一个sigmoid层,输出一个介于0和1之间的值,表示保留的程度。

  2. 输入门: 输入门由两个部分组成:一个sigmoid层决定哪些值将被更新,一个tanh层创建一个新的候选值向量,这些值将被加入到状态中。

  3. 更新细胞状态: 细胞状态通过遗忘门丢弃旧的记忆,并加入新的记忆(由输入门决定)来更新。

  4. 输出门: 输出门决定隐藏状态的输出,它基于当前的输入和上一个隐藏状态。它使用sigmoid层来决定哪些值将输出,然后tanh层将细胞状态转换为输出隐藏状态。

LSTM在序列预测、文本生成、语音识别、时间序列分析等领域表现出色,并且由于其优秀的长序列处理能力,它在深度学习领域得到了广泛的应用。

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

# 读入数据集
data = pd.read_csv('data.csv')

# 确保 'VS' 列存在
if 'VS' in data.columns:
    # 选取除去 'VS' 列的数据作为特征
    features = data.iloc[:, :-1]
    labels = data.iloc[:, -1]
else:
    features = data
    labels = data.pop('target_column_name')  # 假设目标列名为 'target_column_name'

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)

# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(64, activation='relu', input_shape=(X_train.shape[1], 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# 训练模型
model.fit(X_train, y_train, batch_size=32, epochs=200)

# 预测测试集
test_predict = model.predict(X_test)

# 去掉多余的维度
test_predict = np.squeeze(test_predict)
y_test = np.squeeze(y_test)

# 计算绝对误差
abs_error = np.abs(test_predict - y_test)
y_test=np.array(y_test)

print('Mean Absolute Error:', np.mean(abs_error))
test_loss = model.evaluate(X_test, y_test, return_dict=True)

# Calculate the MAE and R^2
test_mae = mean_absolute_error(y_test, test_predict)
test_r2 = r2_score(y_test, test_predict)

# Print the results
print(f'Test loss: {test_loss["loss"]:.4f}')
print(f'Test MAE: {test_mae:.4f}')
print(f'Test R^2: {test_r2:.4f}')

y_test=np.array(y_test)
plt.plot(y_test,color="r",label="acc") #颜色表示 
plt.plot(y_pred,color=(0,0,0),label="pre") 
plt.xlabel("number") #x轴命名表示
plt.ylabel("VS") #y轴命名表示
plt.legend()
plt.show()

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值