Source code for dfa_recommender.evaluate

import torch
import numpy as np
from sklearn.metrics import r2_score, mean_absolute_error
from scipy.stats import pearsonr



[docs]def evaluate_regressor(regressor, loader, device, y_scaler): ''' Evaluate the model performance on a single regression task Parameters ---------- regressor: torch.nn.Module trained regression model loader: torch.utils.data.DataLoader your torch dataloader device: torch.device the device at which this evaluation is performed y_scaler: sklearn.preprocessing.StandardScaler the scaler that you normalize the label of training data Returns ---------- mae: float MAE scaled_mae: float scaled MAE rval: float, Pearson's coefficient ''' assert isinstance(regressor, torch.nn.Module) assert isinstance(loader, torch.utils.data.DataLoader) assert isinstance(device, torch.device) regressor.eval() preds = [] labels = [] with torch.no_grad(): for x, y in loader: _pred = regressor(x.to(device)) preds.append(_pred.cpu().numpy()) labels.append(y.cpu().numpy()) y = y_scaler.inverse_transform(labels[0].reshape(-1, 1)).reshape(-1, ) y_hat = y_scaler.inverse_transform(preds[0].reshape(-1, 1)).reshape(-1, ) mae = mean_absolute_error(y_hat, y) scaled_mae = mae/(np.max(y) - np.min(y)) R2 = r2_score(y, y_hat) rval = pearsonr(y, y_hat)[0] regressor.train() return mae, scaled_mae, rval