LSTM-forecaster / utils /prediction.py
nkapila6's picture
Upload 373 files
964e116 verified
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on 2024-07-24 22:03:58 Wednesday
@author: Nikhil Kapila
"""
import torch
import numpy as np
import pandas as pd
from utils.forecasting_utils import sliding_windows
from sklearn.metrics import mean_absolute_percentage_error
def model_predict_lookback(model, scaler, hourly_data, lookback):
initial_window_X = hourly_data[-lookback:][hourly_data.columns[0]].values.reshape(1, lookback ,1)
initial_window_scaled = scaler.transform(initial_window_X.reshape(-1,1)).reshape(-1, lookback, 1)
initial_window = torch.tensor(initial_window_scaled, dtype=torch.float32)
future_predictions=[]
model.eval()
current_window = initial_window
for _ in range(lookback):
with torch.no_grad():
next_pred = model(current_window)
future_predictions.append(next_pred.item())
next_pred = next_pred.reshape(1, 1, 1)
current_window = torch.cat((current_window[:, 1:, :], next_pred), dim=1)
future_dates = pd.date_range(start=hourly_data.index[-1] + pd.Timedelta(hours=1), periods=lookback, freq='h')
future_df = pd.DataFrame(future_predictions, index=future_dates, columns=['Predicted'])
future_df_1 = scaler.inverse_transform(future_df)
predicted = pd.DataFrame({'timestamp': pd.Index(future_df.index), 'Predicted': future_df_1.flatten()})
predicted.set_index('timestamp', inplace=True)
return predicted
def model_predict_full_input(model, scaler, hourly_data, lookback):
X, y, timestamp = sliding_windows(hourly_data, lookback)
X_scaled = scaler.transform(X.reshape(-1, 1)).reshape(-1, lookback, 1)
X_tensor = torch.tensor(X_scaled, dtype=torch.float32)
val_preds = []
with torch.no_grad():
output = model(X_tensor)
val_preds.extend(output.view(-1).tolist())
val_preds = np.array(val_preds).reshape(-1, 1)
predicted = scaler.inverse_transform(val_preds)
return predicted, mean_absolute_percentage_error(y, predicted)*100