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_true
和y_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_true
或y_pred
中),f 分數是未定義的。在這種情況下,預設會將 f 分數設定為 0.0,並發出UndefinedMetricWarning
警告。此行為可以透過設定zero_division
參數來修改。參考文獻
[1]範例
>>> 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])