赞
踩
时间序列问题是指基于时间顺序的数据进行分析和预测的问题。在深度学习的背景下,常用的模型包括循环神经网络(RNN),长短期记忆网络(LSTM)和门控循环单元(GRU)等。这些模型在处理序列数据时具有较好的表现。以下是解题的一般步骤:
收集与问题相关的时间序列数据。例如,股票价格、天气数据、销售记录等。
处理缺失值和异常值,确保数据的一致性和完整性。可以使用插值、填补和过滤的方法来处理。
根据具体问题的需求提取特征。例如,可以从时间戳中提取小时、星期、月份等时间特征,或计算移动平均值、标准差等统计特征。
将数据进行标准化或归一化处理,以加速模型的训练过程并提高模型的收敛速度。
将数据划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调整模型超参数,测试集用于评估模型的泛化能力。
选择适合的模型架构(RNN, LSTM, GRU等)并搭建模型。
RNN适用于处理序列数据,但存在梯度消失和梯度爆炸的问题,不适合长序列的预测。
- import torch
- import torch.nn as nn
-
- class RNNModel(nn.Module):
- def __init__(self, input_size, hidden_size, output_size):
- super(RNNModel, self).__init__()
- self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
- self.fc = nn.Linear(hidden_size, output_size)
-
- def forward(self, x):
- out, _ = self.rnn(x)
- out = self.fc(out[:, -1, :])
- return out
LSTM能够有效解决RNN的梯度消失问题,适合长序列的预测。
- class LSTMModel(nn.Module):
- def __init__(self, input_size, hidden_size, output_size):
- super(LSTMModel, self).__init__()
- self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
- self.fc = nn.Linear(hidden_size, output_size)
-
- def forward(self, x):
- out, _ = self.lstm(x)
- out = self.fc(out[:, -1, :])
- return out
GRU是LSTM的简化版本,训练速度更快,但性能稍逊于LSTM。
- class GRUModel(nn.Module):
- def __init__(self, input_size, hidden_size, output_size):
- super(GRUModel, self).__init__()
- self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
- self.fc = nn.Linear(hidden_size, output_size)
-
- def forward(self, x):
- out, _ = self.gru(x)
- out = self.fc(out[:, -1, :])
- return out
选择适合的损失函数(如均方误差)和优化器(如Adam)。
- criterion = nn.MSELoss()
- optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
通过反向传播算法训练模型,并在验证集上评估模型性能,调整超参数。
- for epoch in range(num_epochs):
- outputs = model(train_data)
- optimizer.zero_grad()
- loss = criterion(outputs, train_labels)
- loss.backward()
- optimizer.step()
-
- if (epoch+1) % 100 == 0:
- print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
在测试集上评估模型的性能,计算评价指标(如均方误差、平均绝对误差等)。
使用训练好的模型进行未来数据的预测。
保存训练好的模型,以便后续使用。可以将模型部署到云端或本地服务器,进行实时预测。
- import numpy as np
- import pandas as pd
- from sklearn.preprocessing import MinMaxScaler
- from keras.models import Sequential
- from keras.layers import LSTM, Dense, RepeatVector, TimeDistributed
- from keras.optimizers import Adam
- train = pd.read_csv('train.csv')
- test = pd.read_csv('test.csv')
- def preprocess_data(df, look_back=100):
- grouped = df.groupby('id')
- datasets = {}
- for id, group in grouped:
- datasets[id] = group.values
-
- X, Y, OOT = [], [], []
- for id, data in datasets.items():
- for i in range(10, 15):
- a = data[i:(i + look_back), 3]
- a = np.append(a, np.array([0] * (100 - len(a))))
- X.append(a[::-1])
- Y.append(data[i - 10:i, 3][::-1])
-
- a = data[:100, 3]
- a = np.append(a, np.array([0] * (100 - len(a))))
- OOT.append(a[::-1])
-
- return np.array(X, dtype=np.float64), np.array(Y, dtype=np.float64), np.array(OOT, dtype=np.float64), list(
- datasets.keys())

groupby('id')
将数据按房屋ID分组。
datasets
用于存储每个房屋的数据。
对每个房屋的数据进行处理:
X
是输入序列,每个序列长度为 look_back
。Y
是输出目标,每个目标长度为10天。OOT
是初始的100天数据,用于预测。X
和 OOT
中的数据反转([::-1]
),可能是为了处理LSTM的输入序列。
返回值包括 X
、Y
、OOT
以及房屋ID列表。
- def build_model(look_back, n_features, n_output):
- model = Sequential()
- model.add(LSTM(50, input_shape=(look_back, n_features)))
- model.add(RepeatVector(n_output))
- model.add(LSTM(50, return_sequences=True))
- model.add(TimeDistributed(Dense(1)))
- model.compile(loss='mean_squared_error', optimizer=Adam(0.001))
- return model
Sequential
创建一个顺序模型。LSTM
具有50个单元,输入形状为 (look_back, n_features)
。RepeatVector
将输入重复 n_output
次。LSTM
也有50个单元,return_sequences=True
表示返回整个序列。TimeDistributed(Dense(1))
对每个时间步应用一个全连接层。Adam
优化器和均方误差损失函数编译模型。- look_back = 100
- n_features = 1
- n_output = 10
-
- X, Y, OOT, house_ids = preprocess_data(train, look_back=look_back)
-
- model = build_model(look_back, n_features, n_output)
- model.fit(X, Y, epochs=10, batch_size=64, verbose=1)
- # 保存模型到本地
- model.save('trained_model.h5')
- # 加载保存的模型
- loaded_model = load_model('trained_model.h5')
-
- # 进行预测
- predicted_values = loaded_model.predict(OOT)
参考文章:Task3:尝试使用深度学习方案 - 飞书云文档 (feishu.cn)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。