simplexuq-code / src /methods /trainres.py
anonymous0523ly's picture
Initial anonymous code release
fc329a3 verified
Raw
History Blame
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)