В настоящее время я работаю над данными временного ряда, которые выглядят следующим образом нажмите, чтобы просмотреть данные Данные состоят из 5 компаний, 15 продуктов (в каждой компании 3-5 продуктов) и 6 разных регионов Цель Построить единый обобщенная модель для прогнозирования Вопрос 1 Правильно ли создается единая модель.
Я выбираю LSTM для моделирования,< /p> Вопрос 2 Является ли LSTM правильным выбором, если нет, какой подход лучше всего подходит для такого рода данных?
для обучения LSTM. Я беру данные за последние 120 дней и делаю прогноз на следующие 30 дней. В качестве входных данных я использую данные за последние 120 дней, кроме продаж, следуя этой статье
и цель имеет продажи за следующие 30 дней
Мой подход ПРЕДЕЛОВАЯ ОБРАБОТКА ДАННЫХ (не нужно видеть весь класс, просто посмотрите функцию предварительной обработки, вы получите представление о том, что она делает, а также посмотрите, как создаются последовательности функция, определяющая, как создаются входные и выходные данные)
Epoch 1 :
train loss 0.004617819177448817
test loss 0.006365457516637564
Epoch 2 :
train loss 0.0013970815729702321
test loss 0.010996414257221789
Epoch 3 :
train loss 0.0023961294302583384
test loss 0.012776140605897776
пожалуйста, подскажите мне, куда я иду, или предложите лучший путь.
В настоящее время я работаю над данными временного ряда, которые выглядят следующим образом [b]нажмите, чтобы просмотреть данные[/b] [b]Данные[/b] состоят из 5 компаний, 15 продуктов (в каждой компании 3-5 продуктов) и 6 разных регионов [b]Цель[/b] Построить единый обобщенная модель для прогнозирования [b]Вопрос 1[/b] Правильно ли создается единая модель. Я выбираю LSTM для моделирования,< /p> [b]Вопрос 2[/b] Является ли LSTM правильным выбором, если нет, какой подход лучше всего подходит для такого рода данных? для обучения LSTM. Я беру данные за последние 120 дней и делаю прогноз на следующие 30 дней. В качестве входных данных я использую данные за последние 120 дней, кроме продаж, следуя этой статье и цель имеет продажи за следующие 30 дней Мой подход [b]ПРЕДЕЛОВАЯ ОБРАБОТКА ДАННЫХ (не нужно видеть весь класс, просто посмотрите функцию предварительной обработки, вы получите представление о том, что она делает, а также посмотрите, как создаются последовательности функция, определяющая, как создаются входные и выходные данные)[/b] [code]class DataPreprocess: def __init__(self, data_path) -> None: self.df= pd.read_csv(data_path, index_col='Date', parse_dates=True)
logger.info(f'creating sequences with past window : {past_window_size}, forecast_window : {forecast_window_size}')
for prod, reg in df[['Product', 'Region']].drop_duplicates().values: df_to_np= df[(df['Product']==prod) & (df['Region']==reg)].to_numpy()
for i in range(len(df_to_np)- past_window_size- forecast_window_size): # row= [r for r in df_to_np[i:i+past_window_size]] row= df_to_np[i:i+past_window_size, 1:] X.append(row) # label= [r[0] for r in df_to_np[i+past_window_size: i+past_window_size+forecast_window_size]] label= df_to_np[i+past_window_size:i+past_window_size+forecast_window_size, 0] y.append(label)
return train_loader, test_loader [/code] в функции create_sequences я генерирую последние 120 X и следующие 30 лет [b]МОДЕЛЬ, которую я использую[/b] [code]from torch import nn import torch
out = self.linear1(hidden[-1, :, :]) out = self.batch_norm1(out) out = self.relu(out) out = self.dropout(out)
out = self.linear2(out) # out = self.batch_norm2(out) # out = self.relu(out) # out = self.dropout(out)
# # Output layer # out = self.linear3(out)
return out [/code] ОБУЧЕНИЕ МОДЕЛЕЙ [code] from tqdm import tqdm from pathlib import Path import sys import torch from torch import nn from datetime import datetime import os
now = datetime.now() formatted_time = now.strftime("%d-%m-%y_%H-%M") formatted_time os.makedirs(f'artifacts/LSTM/{formatted_time}')
for epoch in range(epochs): self.model.train() train_loss = 0.0 for X, y in tqdm(train_loader): self.optimizer.zero_grad() outputs = self.model(X) loss = self.loss_fn(outputs, y) train_loss += loss.item() loss.backward() torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=1.0) self.optimizer.step()
avg_train_loss = train_loss / len(train_loader)
print(f'Epoch {epoch+1} --- train loss {avg_train_loss}')
self.model.eval() test_loss = 0.0 with torch.no_grad(): for X, y in tqdm(test_loader): outputs = self.model(X) loss = self.loss_fn(outputs, y) test_loss += loss.item()
avg_test_loss = test_loss / len(test_loader)
self.model.train()
print(f'Epoch {epoch+1} --- test loss {avg_test_loss}\n')
with open(f'artifacts/LSTM/{formatted_time}/metrics.txt', 'a') as file: file.write(f"Epoch {epoch+1} : \n\ttrain loss {avg_train_loss} \n\ttest loss {avg_test_loss}\n\n")
if epoch % save_every ==0 : torch.save(self.model.state_dict(), f'artifacts/LSTM/{formatted_time}/lstm_epoch_{epoch+1}.pth')
def predict(self, X, model_path): ''' X: past 120 days records ''' self.model.load_state_dict(torch.load(model_path)) self.model.eval() preds= self.model(X).detach().numpy().flatten()
return preds
if __name__=='__main__': data_preprocess= DataPreprocess(data_path= 'data/inputs/Corrected_and_Balanced_Time_Series_Data.csv') logger.info('Started Data Preprocessing') train_loader, test_loader= data_preprocess.preprocess(check_model= False) logger.info('Done Data Preprocessing') lstm= LSTM(1, 256, 30, 2, 0.5) lstm.train(epochs=10, train_loader=train_loader, test_loader=test_loader, load_model=False, save_every=1) [/code] [b]результаты[/b] [code]Epoch 1 : train loss 0.004617819177448817 test loss 0.006365457516637564
Epoch 2 : train loss 0.0013970815729702321 test loss 0.010996414257221789
Epoch 3 : train loss 0.0023961294302583384 test loss 0.012776140605897776 [/code] пожалуйста, подскажите мне, куда я иду, или предложите лучший путь.
В настоящее время я работаю над данными временного ряда, которые выглядят следующим образом
нажмите, чтобы просмотреть данные
Данные состоят из 5 компаний, 15 продуктов (в каждой компании 3-5 продуктов) и 6 разных регионов
Цель Построить единый...
Я работаю с блокнотом Jupyter, описанным в главе 15 книги Практическое машинное обучение с помощью Scikit-Learn, Keras & TensorFlow Орельена Жерона (третье издание). Я обнаружил ошибку в ячейке 43 записной книжки. Это в параграфе Многомерные...
Я использую semopy впервые (я больше знаком с lavaan в R). Мне удалось применить метод прогнозирования для непрерывных, нормально распределенных данных (как для одного пропущенного значения, так и для нескольких пропущенных значений), используя...
У меня есть набор данных, содержащий 3 столбца: отметка времени (строка), Inverter_Key (строка) (в моем случае 21 инвертор), энергия (целое число), температура (целое число). Я пытаюсь создать модель LSTM для прогнозирования энергии и температуры...