终于把 LSTM 算法搞懂了!!!

人工智能
LSTM(长短期记忆网络)是一种特殊类型的循环神经网络(RNN),它能够有效地解决传统 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。

今天给大家分享一个强大的算法模型,LSTM

LSTM(长短期记忆网络)是一种特殊类型的循环神经网络(RNN),它能够有效地解决传统 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。

LSTM 的核心思想是通过多个门控机制来控制信息的流动,这些门控机制可以选择性地保留或丢弃输入数据,从而帮助网络捕捉长时间跨度的依赖关系。

图片

LSTM的工作原理

LSTM 的核心思想是通过引入记忆单元来存储信息,并使用三个主要的门(输入门、遗忘门、输出门)来决定哪些信息应该保留,哪些信息应该遗忘,以及哪些信息应该更新。

遗忘门(Forget Gate)

遗忘门决定了哪些信息将从记忆单元中丢弃,它的输出是一个0到1之间的值,0表示完全丢弃信息,1表示完全保留信息。

图片

图片

更新记忆单元状态

记忆单元通过遗忘门和输入门的输出进行更新。

图片

输出门(Output Gate)

LSTM的优势

  1. 避免梯度消失/爆炸
    LSTM能够通过门控机制,有效地保存和更新记忆信息,避免了传统RNN中由于长时间步的反向传播导致的梯度消失和梯度爆炸问题。
  2. 适应长期记忆
    LSTM 可以根据需求保留长期记忆(通过记忆单元状态),使得它在处理长序列任务时更加高效。
  3. 灵活性强
    LSTM不仅适用于标准的时间序列任务,还能够处理文本、语音等多种任务,应用非常广泛。

案例分享

下面是一个使用 LSTM(长短期记忆网络)进行苹果公司股价预测的示例代码。

我们将使用  yfinance 库获取苹果公司历史股价数据, 并通过 TensorFlow 库来构建 LSTM 模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

ticker = 'AAPL'  # 苹果的股票代码
start_date = '2010-01-01'
end_date = '2024-11-01'

data = yf.download(ticker, start=start_date, end=end_date)

data = data[['Close']]

scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

def create_dataset(data, time_step=60):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        X.append(data[i:(i + time_step), 0])
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

time_step = 60  # 使用过去60天的数据来预测下一天的股价
X, y = create_dataset(scaled_data, time_step)

train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]


X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))  # Dropout层防止过拟合
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))  # 输出预测的股价


model.compile(optimizer='adam', loss='mean_squared_error')

model.fit(X_train, y_train, epochs=10, batch_size=32)

predictions = model.predict(X_test)

predictions = scaler.inverse_transform(predictions)
y_test_actual = scaler.inverse_transform(y_test.reshape(-1, 1))

plt.figure(figsize=(14, 6))
plt.plot(data.index[train_size+time_step+1:], y_test_actual, color='blue', label='Real Price')
plt.plot(data.index[train_size+time_step+1:], predictions, color='red', label='Predicted Price')
plt.title('Apple Stock Price Prediction using LSTM')
plt.xlabel('Time')
plt.ylabel('Stock Price (USD)')
plt.legend()
plt.show()

图片

责任编辑:武晓燕 来源: 程序员学长
相关推荐

2024-09-23 09:12:20

2024-10-16 07:58:48

2024-10-17 13:05:35

神经网络算法机器学习深度学习

2024-09-12 08:28:32

2024-11-15 13:20:02

2024-10-28 00:38:10

2024-09-20 07:36:12

2024-07-17 09:32:19

2024-11-14 00:16:46

Seq2Seq算法RNN

2024-10-05 23:00:35

2024-08-01 08:41:08

2024-10-08 15:09:17

2024-10-30 08:23:07

2024-10-08 10:16:22

2024-10-28 00:00:10

机器学习模型程度

2024-10-28 15:52:38

机器学习特征工程数据集

2024-08-23 09:06:35

机器学习混淆矩阵预测

2024-11-05 12:56:06

机器学习函数MSE

2024-10-14 14:02:17

机器学习评估指标人工智能

2024-09-18 16:42:58

机器学习评估指标模型
点赞
收藏

51CTO技术栈公众号