Source code for incerto.calibration.utils

"""
Utility functions for calibration methods and metrics.
"""

import numpy as np
import torch
import torch.nn.functional as F


[docs] def get_bin_stats(confidences: np.ndarray, accuracies: np.ndarray, n_bins: int): """ Helper to compute per-bin average confidence, accuracy, and counts. Args: confidences: Array of confidence scores. accuracies: Array of binary accuracies (0 or 1). n_bins: Number of bins. Returns: Tuple of (bin_confidences, bin_accuracies, bin_weights). """ bins = np.linspace(0.0, 1.0, n_bins + 1) bin_ids = np.digitize(confidences, bins, right=True) - 1 bin_ids = np.clip(bin_ids, 0, n_bins - 1) bin_conf = np.zeros(n_bins) bin_acc = np.zeros(n_bins) counts = np.zeros(n_bins) total = len(confidences) if total == 0: return bin_conf, bin_acc, counts for b in range(n_bins): idx = bin_ids == b if np.any(idx): bin_conf[b] = np.mean(confidences[idx]) bin_acc[b] = np.mean(accuracies[idx]) counts[b] = np.sum(idx) return bin_conf, bin_acc, counts / total
[docs] def extract_confidences_and_predictions(logits: torch.Tensor): """ Extract confidence scores and predictions from logits. Args: logits: Tensor of shape (n_samples, n_classes). Returns: Tuple of (confidences, predictions) as numpy arrays. """ probs = F.softmax(logits, dim=1).detach().cpu().numpy() confidences = np.max(probs, axis=1) predictions = np.argmax(probs, axis=1) return confidences, predictions
[docs] def logits_to_probs(logits: torch.Tensor) -> torch.Tensor: """ Convert logits to probabilities using softmax. Args: logits: Tensor of shape (n_samples, n_classes). Returns: Probabilities tensor of same shape. """ return F.softmax(logits, dim=1)