傑卡德分數#

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_truey_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 分數並發出警告。

參考文獻

範例

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