F1 分數 (f1_score)#

sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')[原始碼]#

計算 F1 分數,也稱為平衡 F 分數或 F 測度。

F1 分數可以解釋為精確度和召回率的調和平均數,其中 F1 分數在 1 時達到最佳值,在 0 時達到最差值。精確度和召回率對 F1 分數的相對貢獻是相等的。F1 分數的公式是

\[\text{F1} = \frac{2 * \text{TP}}{2 * \text{TP} + \text{FP} + \text{FN}}\]

其中 \(\text{TP}\) 是真正例的數量,\(\text{FN}\) 是偽陰性的數量,而 \(\text{FP}\) 是偽陽性的數量。當沒有真正例、偽陰性或偽陽性時,F1 預設計算為 0.0。

通過將多類別多標籤數據視為每個標籤的二元問題集合,來實現對二元目標以外的支持。對於二元情況,設定 average='binary' 將會回傳 pos_label 的 F1 分數。如果 average 不是 'binary',則會忽略 pos_label 並計算兩個類別的 F1 分數,然後取平均值或兩個都回傳 (當 average=None 時)。同樣地,對於多類別多標籤目標,所有 labels 的 F1 分數會根據 average 參數回傳或取平均值。使用 labels 指定要計算 F1 分數的標籤集。

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

參數:
y_true1 維類陣列,或標籤指示陣列 / 稀疏矩陣

真實 (正確) 目標值。

y_pred1 維類陣列,或標籤指示陣列 / 稀疏矩陣

分類器回傳的預估目標。

labels類陣列,預設值為 None

average != 'binary' 時要包含的標籤集,以及當 average is None 時它們的順序。可以排除數據中存在的標籤,例如在多類別分類中排除「負類別」。可以包含數據中不存在的標籤,並且會被「分配」0 個樣本。對於多標籤目標,標籤是欄索引。預設情況下,會依排序順序使用 y_truey_pred 中的所有標籤。

在 0.17 版中變更: 針對多類別問題改進了 labels 參數。

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」以考慮標籤不平衡;這可能會導致 F 分數不在精確度和召回率之間。

'samples':

計算每個實例的指標,並找出它們的平均值 (僅對於多標籤分類有意義,其中這與 accuracy_score 不同)。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。

zero_division{"warn", 0.0, 1.0, np.nan},預設值為 "warn"

當發生零除法時(即當所有預測和標籤都是負數時),設定要回傳的值。

注意事項:- 若設定為「warn」,其作用如同 0,但同時也會發出警告。 - 若設定為 np.nan,這些值將會從平均值中排除。

1.3 版本新增:新增了 np.nan 選項。

回傳值:
f1_score浮點數或浮點數陣列,形狀 = [n_unique_labels]

二元分類中正類別的 F1 分數,或是多類別任務中每個類別的 F1 分數的加權平均。

另請參閱

fbeta_score

計算 F-beta 分數。

精確率、召回率、F分數支援 (precision_recall_fscore_support)

計算精確度、召回率、F 分數和支持度。

傑卡德係數 (jaccard_score)

計算 Jaccard 相似係數分數。

多標籤混淆矩陣 (multilabel_confusion_matrix)

計算每個類別或樣本的混淆矩陣。

注意事項

true positive + false positive + false negative == 0 時 (亦即,一個類別完全不存在於 y_truey_pred 中),f 分數是未定義的。在這種情況下,預設會將 f 分數設定為 0.0,並發出 UndefinedMetricWarning 警告。此行為可以透過設定 zero_division 參數來修改。

參考文獻

範例

>>> import numpy as np
>>> from sklearn.metrics import f1_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> f1_score(y_true, y_pred, average='macro')
0.26...
>>> f1_score(y_true, y_pred, average='micro')
0.33...
>>> f1_score(y_true, y_pred, average='weighted')
0.26...
>>> f1_score(y_true, y_pred, average=None)
array([0.8, 0. , 0. ])
>>> # binary classification
>>> y_true_empty = [0, 0, 0, 0, 0, 0]
>>> y_pred_empty = [0, 0, 0, 0, 0, 0]
>>> f1_score(y_true_empty, y_pred_empty)
0.0...
>>> f1_score(y_true_empty, y_pred_empty, zero_division=1.0)
1.0...
>>> f1_score(y_true_empty, y_pred_empty, zero_division=np.nan)
nan...
>>> # multilabel classification
>>> y_true = [[0, 0, 0], [1, 1, 1], [0, 1, 1]]
>>> y_pred = [[0, 0, 0], [1, 1, 1], [1, 1, 0]]
>>> f1_score(y_true, y_pred, average=None)
array([0.66666667, 1.        , 0.66666667])