import torch def binary_accuracy(y_pred, y_true): assert y_true.ndim == 1 and y_true.size() == y_pred.size() y_prob = torch.sigmoid(y_pred) y_prob = y_prob > 0.5 return (y_true == y_prob).float().sum().item() / y_true.size(0) def precision(y_pred, y_true): assert y_true.ndim == 1 and y_true.size() == y_pred.size() y_prob = torch.sigmoid(y_pred) y_prob = y_prob > 0.5 y_positive = y_true >= 1 tp = (y_positive * y_prob).float().sum().item() n_positive = y_positive.float().sum().item() if tp == 0: return 0 return tp / n_positive def recall(y_pred, y_true): assert y_true.ndim == 1 and y_true.size() == y_pred.size() y_prob = torch.sigmoid(y_pred) y_prob = y_prob > 0.5 y_positive = y_true >= 1 tp = (y_positive * y_prob).float().sum().item() n_pred_positive = y_prob.float().sum().item() if tp == 0: return 0 return tp / n_pred_positive