simplexuq-code / src /methods /trainres.py
anonymous0523ly's picture
Initial anonymous code release
fc329a3 verified
Raw
History Blame Contribute Delete
1.3 kB
"""Local scaling from training residuals (expected to fail)."""
import numpy as np
from .base import ConformalResult
from ._split_quantile import split_conformal_quantile
from ._knn_sigma import knn_sigma_hat
def trainres_conformal(
R_cal: np.ndarray,
R_test: np.ndarray,
alpha: float,
U_cal: np.ndarray,
U_test: np.ndarray,
R_train: np.ndarray,
U_train: np.ndarray,
k: int = 20,
) -> ConformalResult:
"""Locally-normalized conformal using training residuals for scale.
Args:
R_cal: calibration residuals (n_cal,)
R_test: test residuals (n_test,)
alpha: miscoverage level
U_cal: calibration predictions (n_cal, K)
U_test: test predictions (n_test, K)
R_train: training residuals (n_train,)
U_train: training predictions (n_train, K)
k: kNN neighbors for scale estimation
Returns:
ConformalResult (expected to be miscalibrated).
"""
sigma_hat_cal = knn_sigma_hat(U_train, R_train, U_cal, k=k)
S_cal = R_cal / sigma_hat_cal
q = split_conformal_quantile(S_cal, alpha)
sigma_hat_test = knn_sigma_hat(U_train, R_train, U_test, k=k)
radius = sigma_hat_test * q
covered = R_test <= radius
return ConformalResult(covered=covered, radius=radius, threshold=q)