62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
import numpy as np
|
|
import torch
|
|
from torch import nn
|
|
|
|
from utils.dataset_creation import inverse_scale_feature
|
|
|
|
|
|
def plot_prediction_windows(index: int,
|
|
training_configuration: dict,
|
|
item_x: np.ndarray,
|
|
item_y: np.ndarray,
|
|
preds: np.ndarray,
|
|
scalers: dict,
|
|
features_to_plot: list,
|
|
output_feature_names: list,
|
|
fig_widget):
|
|
window_features = item_x[index]
|
|
indices = np.arange(window_features.shape[0])
|
|
actual = item_y[index].ravel()
|
|
predicted = preds[index]
|
|
|
|
# clear previous traces
|
|
fig_widget.data = []
|
|
|
|
for feature in features_to_plot:
|
|
feature_index = feature["index"]
|
|
feature_name = feature["name"]
|
|
fig_widget.add_scatter(
|
|
x=indices,
|
|
y=window_features[:, feature_index],
|
|
mode="lines",
|
|
name=feature_name,
|
|
)
|
|
|
|
num_outputs = predicted.shape[-1]
|
|
scaled_preds = list()
|
|
for i in range(num_outputs):
|
|
if isinstance(training_configuration["loss_functions"][i], nn.BCEWithLogitsLoss):
|
|
output = torch.sigmoid(torch.tensor(predicted[i]))
|
|
else:
|
|
output = predicted[i]
|
|
|
|
output = float(output)
|
|
|
|
scaled_output = inverse_scale_feature(output,
|
|
output_feature_names[i],
|
|
scalers)
|
|
|
|
scaled_preds.append(scaled_output)
|
|
|
|
scaled_actuals = list()
|
|
for i in range(num_outputs):
|
|
output = float(actual[i].numpy())
|
|
scaled_output = inverse_scale_feature(output,
|
|
output_feature_names[i],
|
|
scalers)
|
|
|
|
scaled_actuals.append(scaled_output)
|
|
|
|
# add actual and predicted values
|
|
print(f"actual: {scaled_actuals}, predicted: {scaled_preds}")
|