類別可能性比率#
- 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_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=[負類別, 正類別]
>>> 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))