class_likelihood_ratios#

sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, labels=None, sample_weight=None, raise_warning=True)#

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

正似然比是 LR+ = 敏感度 / (1 - 特异度) ,其中敏感度或召回率是比率 tp / (tp + fn) ,特异度是 tn / (tn + fp) 。负似然比是 LR- = (1 - 敏感度) / 特异度 。这里 tp 是真阳性数, fp 是假阳性数, tn 是真阴性数, fn 是假阴性数。这两个类别的似然比都可以用来在给定先验概率的情况下获得后验概率。

LR+ 的范围从 1 到无穷大。 LR+ 为 1 表示预测正类的概率对于属于任一类的样本是相同的;因此,测试是无用的。 LR+ 越大,与先验概率相比,正预测更有可能是真阳性。 LR+ 低于 1 的值是无效的,因为它表明样本为真阳性的几率相对于先验几率下降。

LR- 的范围从 0 到 1。越接近 0,给定样本为假阴性的概率越低。 LR- 为 1 意味着测试是无用的,因为患病的几率在测试后没有变化。 LR- 大于 1 的值会使分类器无效,因为它表明在分类为阴性后,样本属于正类的几率增加。这是分类器系统性地预测与真实标签相反的情况。

医学中的典型应用是将正/负类别分别识别为疾病的存在/不存在;分类器为诊断测试;个体的先验患病概率可以是该疾病的流行率(特定人群中受某种疾病影响的比率);后验概率是给定阳性测试结果时疾病确实存在的概率。

更多信息请参阅 用户指南

Parameters:
y_true1d array-like, 或标签指示器数组 / 稀疏矩阵

真实目标值(正确)。

y_pred1d array-like, 或标签指示器数组 / 稀疏矩阵

分类器返回的估计目标。

labelsarray-like, 默认=None

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

sample_weightarray-like of shape (n_samples,), 默认=None

样本权重。

raise_warningbool, 默认=True

当出现零除时是否引发特定情况的警告消息。即使不引发错误,函数在这种情况下也会返回 nan。

Returns:
(positive_likelihood_ratio, negative_likelihood_ratio)tuple

包含两个浮点数的元组,第一个包含正似然比,第二个包含负似然比。

Warning
假阳性 == 0 时,正似然比未定义。
真阴性 == 0 时,负似然比未定义。
真阳性 + 假阴性 == 0 时,两个比率均未定义。
在这种情况下,如果 raise_warning=True,将引发 UserWarning

References

Examples

>>> 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)