八、门控循环单元(GRU)

1. 原理

GRU 是另一种改进的 RNN 结构,旨在克服标准 RNN 的梯度消失问题。GRU 相较于 LSTM 具有更简洁的结构,只使用了重置门和更新门来控制信息的流动。

2. 核心公式

十大时间序列模型最强总结(八)门控循环单元(GRU)_深度学习

3. 优缺点

1)优点

  • 结构比 LSTM 更简单,训练速度更快。
  • 处理长期依赖问题。

2)缺点

  • 与 LSTM 相比,性能可能有所差距,特别是在某些复杂任务上。
  • 对超参数的设置较为敏感。

4. 适用场景

GRU 模型适用于需要捕捉长期依赖关系的时间序列预测任务,如时间序列预测、自然语言处理等。

5. 核心案例代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import GRU, Dense
from sklearn.preprocessing import MinMaxScaler

# 生成示例数据:时间序列
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100)
data = np.sin(np.linspace(0, 10, 100)) + np.random.randn(100) * 0.1

# 创建DataFrame
df = pd.DataFrame({'Date': dates, 'Value': data})

# 预处理数据
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(df[['Value']])
X, y = [], []
for i in range(len(scaled_data) - 10):
    X.append(scaled_data[i:i+10])
    y.append(scaled_data[i+10])
X, y = np.array(X), np.array(y)

# 构建GRU模型
model = Sequential()
model.add(GRU(50, input_shape=(X.shape[1], X.shape[2])))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')

# 训练模型
model.fit(X, y, epochs=20, verbose=1)

# 预测
predicted = model.predict(X)
predicted = scaler.inverse_transform(predicted)
actual = scaler.inverse_transform(y.reshape(-1, 1))

# 可视化
plt.figure(figsize=(12, 6))
plt.plot(df['Date'][10:], actual, label='Actual', color='blue')
plt.plot(df['Date'][10:], predicted, label='Predicted', color='red', linestyle='--')
plt.title('GRU Model Forecast')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
plt.show()

图中展示了 GRU 模型的预测结果(红色虚线)与实际数据(蓝色)。GRU 能够有效处理时间序列数据并进行预测。