分布外(OOD)检测¶
从一个训练好的神经网络分类器开始,可以拟合以下模型之一,以帮助区分分布内和分布外的输入。
- class fortuna.ood_detection.mahalanobis.MalahanobisOODClassifier(*args, **kwargs)[来源]¶
假设一个softmax神经分类器\(f(\mathbf{x})\)的预训练特征遵循一个具有共享协方差矩阵\(\mathbf{\Sigma}\)的类条件高斯分布:
\[\mathbb{P}(f(\mathbf{x})|y=k) = \mathcal{N}(f(\mathbf{x})|\mu_k, \mathbf{\Sigma})\]对于所有 \(k \in {1,...,K}\),其中 \(K\) 是类别数量。
新测试样本 \(\mathbf{x}\) 的置信度分数 \(M(\mathbf{x})\) 是通过计算 \(f(\mathbf{x})\) 与拟合的类高斯分布之间的最大(平方)马氏距离得到的。
- Parameters:
num_classes (int) – 用于分布内分类任务的类别数量。
- property cov¶
- Returns:
共享的协方差矩阵,形状为(d, d),其中d是嵌入大小。
- Return type:
数组
- fit(embeddings, targets)[来源]¶
使用类特定均值和共享协方差矩阵将多元高斯拟合到训练数据。
- Parameters:
embeddings (数组) – 形状为 (n, d) 的嵌入,其中 n 是训练样本的数量,d 是嵌入的大小。
targets (Array) – 一个长度为 n 的数组,包含每个输入样本的真实标签。
- Return type:
None
- property mean¶
- Returns:
一个形状为(num_classes, d)的矩阵,其中num_classes是分布内分类任务中的类别数量。 矩阵的第i行对应于第i类的拟合高斯分布的均值。
- Return type:
数组
- class fortuna.ood_detection.ddu.DeepDeterministicUncertaintyOODClassifier(*args, **kwargs)[来源]¶
一个高斯混合模型 \(q(\mathbf{x}, z)\),每个类别 \(k \in {1,...,K}\) 有一个单一的高斯混合成分, 在训练后被拟合。 每个类别成分通过计算特征向量 \(f(\mathbf{x})\) 的经验均值 \(\mathbf{\hat{\mu}_k}\) 和协方差矩阵 \(\mathbf{\hat{\Sigma}_k}\) 来拟合。
新测试样本的置信度分数 \(M(\mathbf{x})\) 是通过计算特征表示的负边际似然获得的。
- Parameters:
num_classes (int) – 用于分布内分类任务的类别数量。
- property cov¶
- Returns:
拟合GMM的每类协方差矩阵。数组的形状为(num_classes, d, d),其中num_classes是分布内分类任务中的目标类别数量,d是嵌入大小。
- Return type:
数组
- fit(embeddings, targets)[来源]¶
使用类特定的均值和协方差矩阵将多元高斯分布拟合到训练数据。
- Parameters:
embeddings (数组) – 形状为 (n, d) 的嵌入,其中 n 是训练样本的数量,d 是嵌入的大小。
targets (Array) – 一个长度为 n 的数组,包含每个输入样本的真实标签。
- Return type:
None
- property mean: Array | ndarray¶
- Returns:
拟合GMM的每类均值向量。数组的形状为(num_classes, d),其中num_classes是分布内分类任务中目标类别的数量,d是嵌入大小。
- Return type:
数组