傑卡德分數#
- sklearn.metrics.jaccard_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')[原始碼]#
傑卡德相似係數分數。
傑卡德指數 [1] 或傑卡德相似係數,定義為兩個標籤集合的交集大小除以聯集大小,用於比較樣本的預測標籤集合與
y_true
中對應的標籤集合。對於
binary
目標以外的支援,是將多類別和多標籤資料視為一組二元問題來處理,每個標籤一個問題。在二元情況下,設定average='binary'
會回傳pos_label
的 Jaccard 相似係數。如果average
不是'binary'
,則會忽略pos_label
,並計算兩個類別的分數,然後取平均值或兩者都回傳(當average=None
時)。同樣地,對於多類別和多標籤目標,所有labels
的分數會根據average
參數回傳或取平均值。使用labels
來指定要計算分數的標籤集合。在 使用者指南 中閱讀更多資訊。
- 參數:
- y_true一維類陣列,或標籤指示器陣列/稀疏矩陣
真實(正確)標籤。
- y_pred一維類陣列,或標籤指示器陣列/稀疏矩陣
預測的標籤,由分類器回傳。
- labels形狀為 (n_classes,) 的類陣列,預設值為 None
當
average != 'binary'
時要包含的標籤集合,以及當average is None
時的順序。可以排除資料中存在的標籤,例如在多類別分類中排除「負類別」。可以包含資料中不存在的標籤,並且將「分配」0 個樣本。對於多標籤目標,標籤是欄索引。預設情況下,y_true
和y_pred
中的所有標籤都會以排序後的順序使用。- pos_label整數、浮點數、布林值或字串,預設值為 1
如果
average='binary'
且資料為二元,則要報告的類別,否則會忽略此參數。對於多類別或多標籤目標,設定labels=[pos_label]
和average != 'binary'
以僅報告一個標籤的指標。- average{‘micro’、‘macro’、‘samples’、‘weighted’、‘binary’} 或 None,預設值為 ‘binary’
如果為
None
,則會回傳每個類別的分數。否則,這會決定對資料執行的平均類型'binary'
:僅報告由
pos_label
指定的類別的結果。這僅適用於目標 (y_{true,pred}
) 為二元的情況。'micro'
:透過計算總計的真正例、假負例和假正例來全域計算指標。
'macro'
:計算每個標籤的指標,並找出它們的未加權平均值。這不考慮標籤不平衡。
'weighted'
:計算每個標籤的指標,並找出它們的平均值,並以支持度(每個標籤的真實實例數)加權。這會變更 'macro' 以考慮標籤不平衡。
'samples'
:計算每個實例的指標,並找出它們的平均值(僅對多標籤分類有意義)。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None
樣本權重。
- zero_division“warn”,{0.0, 1.0},預設值為 “warn”
設定在零除法時要回傳的值,也就是說,當預測和標籤中都沒有負值時。如果設定為 “warn”,則行為如同 0,但也會發出警告。
在版本 0.24 中新增。
- 回傳:
- score浮點數或形狀為 (n_unique_labels,) 的 ndarray,資料類型為 np.float64
Jaccard 分數。當
average
不是None
時,會回傳單一純量值。
另請參閱
accuracy_score
用於計算準確度分數的函式。
f1_score
用於計算 F1 分數的函式。
multilabel_confusion_matrix
用於計算每個類別或樣本的混淆矩陣的函式。
注意事項
如果某些樣本或類別沒有正值,
jaccard_score
可能是一個不佳的指標。如果沒有真實或預測的標籤,Jaccard 未定義,我們的實作將回傳 0 分數並發出警告。參考文獻
[1]範例
>>> import numpy as np >>> from sklearn.metrics import jaccard_score >>> y_true = np.array([[0, 1, 1], ... [1, 1, 0]]) >>> y_pred = np.array([[1, 1, 1], ... [1, 0, 0]])
在二元情況下
>>> jaccard_score(y_true[0], y_pred[0]) np.float64(0.6666...)
在 2D 比較情況下(例如,影像相似度)
>>> jaccard_score(y_true, y_pred, average="micro") np.float64(0.6)
在多標籤情況下
>>> jaccard_score(y_true, y_pred, average='samples') np.float64(0.5833...) >>> jaccard_score(y_true, y_pred, average='macro') np.float64(0.6666...) >>> jaccard_score(y_true, y_pred, average=None) array([0.5, 0.5, 1. ])
在多類別情況下
>>> y_pred = [0, 2, 1, 2] >>> y_true = [0, 1, 2, 2] >>> jaccard_score(y_true, y_pred, average=None) array([1. , 0. , 0.33...])