Source code for caliber.binary_classification.metrics.asce
import numpy as np
from scipy.stats import norm
[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)
bin_indices = np.digitize(probs, bin_edges)
asce = 0
for i in range(1, n_bins + 1):
mask = bin_indices == i
prob_bin = np.mean(mask)
if prob_bin > min_prob_bin:
asce += prob_bin * np.mean(targets[mask] - probs[mask]) ** 2
return asce
[docs]
def average_smooth_squared_calibration_error(
targets: np.ndarray, probs: np.ndarray, n_bins: int = 10, smoothness: float = 0.1
) -> float:
assce = 0
for i in range(1, n_bins + 1):
kernels = norm.pdf(probs, i, smoothness)
assce += np.mean(kernels) * np.mean(kernels * (targets - probs)) ** 2
return assce