时间序列数据分析:特征选择、LSTM模型训练及模型保存
加载时间序列数据集
import pandas as pd
data = pd.read_csv('time_series_data.csv')
对时间序列数据集选择最佳特征
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
# 选择最佳的5个特征
selector = SelectKBest(f_regression, k=5)
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
X_new = selector.fit_transform(X, y)
使用 PyTorch 库对时间序列数据集的最佳特征进行 LSTM 模型训练
import torch
import torch.nn as nn
# 定义LSTM模型
class LSTM(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size):
super(LSTM, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
out, _ = self.lstm(x, (h0, c0))
out = self.fc(out[:, -1, :])
return out
# 定义模型参数
input_size = X_new.shape[1]
hidden_size = 10
num_layers = 2
output_size = 1
# 初始化模型和优化器
model = LSTM(input_size, hidden_size, num_layers, output_size).to(device)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
inputs = torch.from_numpy(X_new).float().to(device)
targets = torch.from_numpy(y.values).float().to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
if (epoch+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
保存模型参数数据文件
PATH = 'lstm_model.pth'
torch.save(model.state_dict(), PATH)
注意:
- 请确保将 'time_series_data.csv' 替换为您的实际数据文件路径。
- 该代码示例假设您已经安装了必要的库,例如 pandas、scikit-learn 和 PyTorch。
- 您可能需要根据您的具体需求调整代码中的参数,例如特征选择数量、模型结构等。
原文地址: https://www.cveoy.top/t/topic/lB88 著作权归作者所有。请勿转载和采集!