pandas.read_csv() 加载时间序列数据集 scikit-learn.FeatureSelector 对时间序列数据集选择最佳特征 使用 PyTorch 库对时间序列数据集的最佳特征进行 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)
原文地址: https://www.cveoy.top/t/topic/lSN 著作权归作者所有。请勿转载和采集!