class_likelihood_ratios#

sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, labels=None, sample_weight=None, raise_warning='deprecated', replace_undefined_by=nan)[source]#

计算二元分类的正负似然比。

阳性似然比为 LR+ = sensitivity / (1 - specificity),其中敏感度或召回率是 tp / (tp + fn),特异性是 tn / (tn + fp)。阴性似然比为 LR- = (1 - sensitivity) / specificity。这里 tp 是真阳性(true positives)的数量,fp 是假阳性(false positives)的数量,tn 是真阴性(true negatives)的数量,fn 是假阴性(false negatives)的数量。两种类别似然比都可用于根据检验前概率获得检验后概率。

LR+ 的范围是 1.0 到无穷大。 LR+ 为 1.0 表示预测阳性类别的概率对于属于任一类别的样本来说是相同的;因此,该测试是无用的。 LR+ 越大,与检验前概率相比,阳性预测是真阳性的可能性就越大。低于 1.0 的 LR+ 值是无效的,因为它表明样本是真阳性的几率相对于检验前几率有所下降。

LR- 的范围是 0.0 到 1.0。它越接近 0.0,给定样本是假阴性的概率就越低。 LR- 为 1.0 表示测试无用,因为测试后拥有该条件的几率没有改变。大于 1.0 的 LR- 值会使分类器无效,因为它表明样本在被分类为阴性后属于阳性类别的几率增加了。当分类器系统地预测与真实标签相反的情况时,就会出现这种情况。

在医学中的典型应用是将阳性/阴性类别分别识别为疾病的存在/不存在;分类器是一种诊断测试;个体患有该疾病的检验前概率可以是该疾病的患病率(在特定人群中发现受某种疾病影响的比例);检验后概率将是在测试结果呈阳性的情况下,该疾病确实存在的概率。

用户指南 中阅读更多内容。

参数:
y_true1d array-like, or label indicator array / sparse matrix

真实(正确)目标值。稀疏矩阵仅在目标为 多标签 类型时受支持。

y_pred1d array-like, or label indicator array / sparse matrix

分类器返回的估计目标。稀疏矩阵仅在目标为 多标签 类型时受支持。

labelsarray-like, default=None

用于索引矩阵的标签列表。这可用于使用排序 labels=[negative_class, positive_class] 来选择阳性类别和阴性类别。如果给定 None,则使用至少一次出现在 y_truey_pred 中的标签,并按排序顺序排列。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

样本权重。

raise_warningbool, default=True

当发生除以零时是否引发特定情况的警告消息。

自版本 1.7 弃用: raise_warning 已在版本 1.7 中弃用,并将在 1.9 中移除,届时在发生除以零的情况下将始终引发 UndefinedMetricWarning

replace_undefined_bynp.nan, 1.0, or dict, default=np.nan

设置当发生除以零时 LR+ 和 LR- 的返回值。可以取以下值:

  • np.nan 返回 np.nan 作为 LR+LR- 的值。

  • 1.0 返回可能的最差分数:{"LR+": 1.0, "LR-": 1.0}

  • 格式为 {"LR+": value_1, "LR-": value_2} 的字典,其中值可以是似然比范围内的非负浮点数、 np.infnp.nan。例如,可以使用 {"LR+": 1.0, "LR-": 1.0} 返回最差分数,表示模型无用;可以使用 {"LR+": np.inf, "LR-": 0.0} 返回最佳分数,表示模型有用。

如果发生除以零,则仅受影响的指标被设置为指定值;另一个指标照常计算。

在版本 1.7 中新增。

返回:
(positive_likelihood_ratio, negative_likelihood_ratio)tuple of float

包含两个浮点数的元组,第一个包含阳性似然比 (LR+),第二个包含阴性似然比 (LR-)。

警告:
y_truey_pred 导致以下情况时引发 UndefinedMetricWarning
y_pred 导致以下情况:
  • 假阳性数量为 0 且 raise_warning 设置为 True(默认):阳性似然比未定义。

  • 真阴性数量为 0 且 raise_warning 设置为 True(默认):阴性似然比未定义。

  • 真阳性和假阴性之和为 0(y_true 中不存在阳性类别的样本):两个似然比均未定义。

对于前两种情况,可以通过设置 replace_undefined_by 参数来定义未定义的指标。

References

示例

>>> import numpy as np
>>> from sklearn.metrics import class_likelihood_ratios
>>> class_likelihood_ratios([0, 1, 0, 1, 0], [1, 1, 0, 0, 0])
(1.5, 0.75)
>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.33, 0.66)
>>> y_true = np.array(["non-zebra", "zebra", "non-zebra", "zebra", "non-zebra"])
>>> y_pred = np.array(["zebra", "zebra", "non-zebra", "non-zebra", "non-zebra"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.5, 0.75)

为避免歧义,请使用 labels=[negative_class, positive_class] 表示法

>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred, labels=["non-cat", "cat"])
(1.5, 0.75)