快速入门¶
Fortuna 提供三种不同的使用模式: 从不确定性估计、 从模型输出 和 从 Flax 模型。 这些模式根据用户自身应用程序的约束条件为用户提供服务。 它们的流程如下图所示,每个流程都从其中一个绿色面板开始。
以下部分简要介绍了每种使用模式。 有关更多详细信息,请参阅使用模式。
从不确定性估计¶
从不确定性估计开始,具有最小的兼容性要求,并且是与库交互的最快级别。 这种使用模式为分类和回归提供了保形预测方法。 这些方法在输入中接受不确定性估计, 并返回保留用户给定概率水平的严格预测集。 在一维回归任务中,保形集可以被视为置信区间或可信区间的校准版本。
请注意,如果您在输入中提供的不确定性估计不准确, 保形集可能会很大且无法使用。 因此,如果您的应用程序允许, 请考虑使用从模型输出和 从Flax模型的使用模式。
示例。 假设您想要校准具有覆盖误差 error 的可信区间,
每个区间对应不同的测试输入变量。
我们假设可信区间作为下限和上限的数组传递,
分别为 test_lower_bounds 和 test_upper_bounds。
您还有为多个验证输入计算的可信区间的下限和上限,
分别为 val_lower_bounds 和 val_upper_bounds。
相应的验证目标数组由 val_targets 表示。
以下代码生成 保形预测区间,
即您测试可信区间的校准版本。
conformal_interval()¶from fortuna.conformal import QuantileConformalRegressor
conformal_intervals = QuantileConformalRegressor().conformal_interval(
val_lower_bounds=val_lower_bounds, val_upper_bounds=val_upper_bounds,
test_lower_bounds=test_lower_bounds, test_upper_bounds=test_upper_bounds,
val_targets=val_targets, error=error)
从模型输出¶
从模型输出开始,假设您已经在某个框架中训练了一个模型,并且以numpy.ndarray格式为每个输入数据点提供模型输出到Fortuna。这种使用模式允许您校准模型输出,估计不确定性,计算指标并获得符合集。
与From uncertainty estimates使用模式相比, 这种模式提供了更好的控制, 因为它可以确保不确定性估计已经适当校准。 然而,如果模型是用传统方法训练的, 模型(也称为认知)不确定性的量化可能较差。 为了缓解这个问题,请考虑From Flax models 使用模式。
示例。
假设你有校准和测试模型的输出,
分别是 calib_outputs 和 test_outputs。
此外,你还有一些校准目标变量的数组 calib_targets。
以下代码提供了一个最小的分类示例,以获得校准的预测熵估计。
OutputCalibClassifier, calibrate(), entropy()¶from fortuna.output_calib_model import OutputCalibClassifier
calib_model = OutputCalibClassifier()
status = calib_model.calibrate(calib_outputs=calib_outputs, calib_targets=calib_targets)
test_entropies = calib_model.predictive.entropy(outputs=test_outputs)
从Flax模型¶
从Flax模型开始,其兼容性要求比从不确定性估计和从模型输出使用模式更高,因为它需要以Flax编写的深度学习模型。然而,它使您能够用可扩展的贝叶斯推理程序替换标准模型训练,这可能会显著改善预测不确定性的量化。
示例。 假设你有一个从输入到逻辑值的Flax分类深度学习模型 model,其输出维度由 output_dim 给出。此外,你有一些训练、验证和校准的TensorFlow数据加载器 train_data_loader、val_data_loader 和 test_data_loader。以下代码提供了一个最小的分类示例,以获得校准的概率估计。
from_tensorflow_data_loader(), ProbClassifier, train(), mean()¶from fortuna.data import DataLoader
train_data_loader = DataLoader.from_tensorflow_data_loader(train_data_loader)
calib_data_loader = DataLoader.from_tensorflow_data_loader(val_data_loader)
test_data_loader = DataLoader.from_tensorflow_data_loader(test_data_loader)
from fortuna.prob_model import ProbClassifier
prob_model = ProbClassifier(model=model)
status = prob_model.train(train_data_loader=train_data_loader, calib_data_loader=calib_data_loader)
test_means = prob_model.predictive.mean(inputs_loader=test_data_loader.to_inputs_loader())