類別可能性比率#

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+ 越大,與事前機率相比,正預測越有可能是真正陽性。小於 1 的 LR+ 值無效,因為它表示樣本為真正陽性的機率相對於事前機率會降低。

LR- 的範圍從 0 到 1。它越接近 0,給定樣本為假陰性的機率就越低。 LR- 為 1 表示該測試無用,因為測試後具有該狀況的機率沒有改變。大於 1 的 LR- 值會使分類器失效,因為它表示在被分類為陰性後,樣本屬於正類別的機率會增加。當分類器系統地預測與真實標籤相反的情況時,就會出現這種情況。

醫學中的典型應用是將正/負類別分別識別為疾病的存在/不存在;分類器是一種診斷測試;個體患有該疾病的事前機率可以是該疾病的患病率(發現受特定醫療狀況影響的特定人群的比例);檢後機率將是在測試結果為陽性的情況下,該狀況確實存在的機率。

請在使用者指南中閱讀更多內容。

參數:
y_true一維類陣列或標籤指示器陣列/稀疏矩陣

基本事實(正確)目標值。

y_pred一維類陣列或標籤指示器陣列/稀疏矩陣

分類器傳回的估計目標。

labels類陣列,預設值=None

用於索引矩陣的標籤清單。這可以用於選擇正負類別,順序為 labels=[負類別, 正類別]。如果給定 None,則會使用至少在 y_truey_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

參考文獻

範例

>>> 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=[負類別, 正類別]

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