从不确定性估计¶
Fortuna 提供了一些 保形预测方法。这些方法从不确定性估计和一些校准数据开始,构建保形预测集,即高于某个阈值的严格预测集。
注意
如果您提供的不确定性估计不准确,保形预测集可能会非常大且信息量不足。 如果可能,请考虑让Fortuna估计不确定性 - 参见From Flax models。
分类¶
在分类中,conformal sets 是高于某个阈值的可能标签的集合。在下面的示例中,我们将展示如何使用 Fortuna 来构建它们。
分类示例:从概率预测中得到的置信区间¶
我们假设你已经训练了一个模型,并且对于每个输入,你都有一种方法来估计每个标签的概率。我们称这些在验证和测试数据集上计算出的概率为val_probs和test_probs。我们进一步要求与验证概率相对应的验证目标变量数组val_targets。然后,以下代码为每个测试输入提供了一个95%的符合集。请参考AdaptivePredictionConformalClassifier。
conformal_set()¶from fortuna.conformal import AdaptivePredictionConformalClassifier
conformal_sets = AdaptivePredictionConformalClassifier().conformal_set(
val_probs=val_probs,
test_probs=test_probs,
val_targets=val_targets,
error=0.05
)
通常,您应该期望您的测试预测被包含在符合集中,因为它们根据您的验证数据和验证概率估计包含了最可能的标签。您还应该期望,总体上,对于分类良好的输入,集合会更小,而对于分类错误的输入,集合会更大,因为后者可能更加不确定。请注意,如果您估计的概率非常不具信息性或高度错误,符合集可能包括几乎所有标签,这表明模型中的高度不确定性。
回归¶
对于具有标量目标变量的回归任务,Fortuna 提供了构建保形区间的保形方法。你可以将这些视为置信区间或可信区间的校准版本。在以下示例中,我们将展示如何使用 Fortuna 来构建它们。
对于这两个例子,您通常应该期望您的测试预测包含在 保形区间内, 因为它们根据您的验证数据和验证区间包含了最可能的预测范围。 您还应该期望,总体而言,分类良好的输入范围较小,而分类错误的输入范围较大, 因为后者可能更加不确定。请注意,如果您的区间没有信息或错误, 保形区间可能会很大。
从置信区间或可信区间得到的保形区间¶
对于这个例子,
我们假设你已经训练了一个模型,并且有一种方法来估计每个预测的置信区间或可信区间。
我们称val_lower_bounds、val_upper_bounds、test_lower_bounds和
test_upper_bounds为这些区间在验证和测试数据集上计算的下限和上限。我们假设这些区间有一个由error给出的错误级别;例如,95%的区间有error=0.05。
我们进一步要求与验证区间对应的验证目标变量数组val_targets。
然后,以下代码为每个测试输入提供了一个错误级别为error的符合区间。
请参考QuantileConformalRegressor。
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
)
从置信度或标量不确定性估计得出的保形区间¶
对于这个例子,
我们假设你已经训练了一个模型,你有办法进行预测并估计预测不确定性的标量度量,
例如标准差。
我们称val_preds、val_uncertainties、test_preds和
test_uncertainties为在某些验证和测试数据集上计算的预测和不确定性。
我们进一步要求与验证预测相对应的验证目标变量数组val_targets。
然后,以下代码为每个测试输入提供了一个95%的保形区间。
请参阅OneDimensionalUncertaintyConformalRegressor作为参考。
conformal_interval()¶from fortuna.conformal import OneDimensionalUncertaintyConformalRegressor
conformal_intervals = OneDimensionalUncertaintyConformalRegressor().conformal_interval(
val_preds=val_preds,
val_uncertainties=val_uncertainties,
test_preds=test_preds,
test_uncertainties=test_uncertainties,
val_targets=val_targets
)