class_likelihood_ratios#

sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, labels=None, sample_weight=None, raise_warning=True)[源代码]#

计算二元分类正可能比和负可能比。

正似然比为 LR+ = sensitivity / (1 - specificity) 其中敏感度或召回率是比率 tp / (tp + fn) 且特异性为 tn / (tn + fp) .负似然比为 LR- = (1 - sensitivity) / specificity .这里 tp 是真阳性的数量, fp 假阳性的数量, tn 是真阴性的数量, fn 假阴性的数量。给定测试前概率,两个类似然比都可以用于获得测试后概率。

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

LR- 范围从0到1。它越接近0,给定样本假阴性的可能性就越低。一 LR- 1意味着测试没有用,因为测试后患有该疾病的几率没有改变。的值 LR- 大于1使分类器无效,因为它指示样本在被分类为阴性之后属于阳性类的几率增加。这是当分类器系统地预测与真实标签相反的情况。

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

阅读更多的 User Guide .

参数:
y_true1D类数组或标签指示符数组/稀疏矩阵

地面真相(正确)目标值。

y_pred1D类数组或标签指示符数组/稀疏矩阵

分类器返回的估计目标。

labels类数组,默认=无

用于索引矩阵的标签列表。这可以用于根据顺序选择正类和负类 labels=[negative_class, positive_class] .如果 None 给出的是那些至少出现一次的 y_truey_pred 按排序顺序使用。

sample_weight形状类似数组(n_samples,),默认=无

样本重量。

raise_warning布尔,默认=True

当存在零划分时是否会引发特定情况的警告消息。即使没有引发错误,该函数在这种情况下也会返回nan。

返回:
(positive_likelihood_ratio, negative_likelihood_ratio)元组

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

警告:
false positive == 0 ,正似然比未定义。
true negative == 0 ,负似然比未定义。
true positive + false negative == 0 这两个比率都是不确定的。
在这种情况下, UserWarning 如果raise_warning=True,将引发。

引用

[1]

Wikipedia entry for the Likelihood ratios in diagnostic testing <https://en.wikipedia.org/wiki/Likelihood_ratios_in_diagnostic_testing> _.

示例

>>> import numpy as np
>>> from sklearn.metrics import class_likelihood_ratios
>>> class_likelihood_ratios([0, 1, 0, 1, 0], [1, 1, 0, 0, 0])
(np.float64(1.5), np.float64(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)
(np.float64(1.33...), np.float64(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)
(np.float64(1.5), np.float64(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"])
(np.float64(1.5), np.float64(0.75))