类似度比#
- sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, labels=None, sample_weight=None, raise_warning=True)[source]#
计算二元分类的正似然比和负似然比。
阳性似然比为
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 会使分类器失效,因为它表示在被分类为阴性后,样本属于阳性类的几率增加。当分类器系统地预测与真实标签相反的结果时,就会出现这种情况。医学中的一个典型应用是将阳性/阴性类别分别识别为疾病的存在/不存在;分类器是一个诊断测试;个人患病的测试前概率可以是该疾病的患病率(特定人群中发现受某种疾病影响的比例);测试后概率将是给定阳性测试结果后疾病真正存在的概率。
更多信息请阅读 用户指南。
- 参数:
- y_true一维数组或标签指示符数组/稀疏矩阵
真实目标值。
- y_pred一维数组或标签指示符数组/稀疏矩阵
分类器返回的估计目标值。
- labels类数组,默认为 None
用于索引矩阵的标签列表。这可用于选择正类和负类,顺序为
labels=[negative_class, positive_class]
。如果给出None
,则使用在y_true
或y_pred
中至少出现一次的标签,并按排序顺序排列。- sample_weight形状为 (n_samples,) 的类数组,默认为 None
样本权重。
- raise_warning布尔值,默认为 True
当出现零除法时是否引发特定情况的警告消息。即使没有引发错误,函数在这种情况下也会返回 nan。
- 返回值:
- (positive_likelihood_ratio, negative_likelihood_ratio)元组
包含两个浮点数的元组,第一个是阳性似然比,第二个是阴性似然比。
- 警告:
- 当
false positive == 0
时,阳性似然比未定义。 - 当
true negative == 0
时,阴性似然比未定义。 - 当
true positive + false negative == 0
时,两个比率均未定义。 - 在这种情况下,如果 raise_warning=True,则会引发
UserWarning
。
- 当
参考文献
[1]示例
>>> 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))