Source code for caliber.multiclass_classification.metrics.asce
import numpy as np
[docs]
def average_squared_calibration_error(
targets: np.ndarray, probs: np.ndarray, n_bins: int = 10, min_prob_bin: float = 0.0
) -> float:
bin_edges = np.linspace(0, 1, n_bins + 1)
top_class_indices = np.argmax(probs, axis=1)
n_classes = probs.shape[1]
one_hot_targets = np.eye(n_classes)[targets]
asce = 0
for c in range(n_classes):
bin_indices = np.digitize(probs[:, c], bin_edges)
for i in range(1, n_bins + 1):
mask = (bin_indices == i) * (top_class_indices == c)
prob_bin = np.mean(mask)
if prob_bin > min_prob_bin:
class_probs = probs[mask, c]
class_targets = one_hot_targets[mask, c]
asce += prob_bin * np.mean(class_targets - class_probs) ** 2
return asce