精確率、召回率、F分數支援#
- sklearn.metrics.precision_recall_fscore_support(y_true, y_pred, *, beta=1.0, labels=None, pos_label=1, average=None, warn_for=('precision', 'recall', 'f-score'), sample_weight=None, zero_division='warn')[來源]#
計算每個類別的精確率、召回率、F測度和支援度。
精確率是比率
tp / (tp + fp)
,其中tp
是真正例的數量,fp
是假正例的數量。從直觀上講,精確率是分類器不將負樣本標記為正樣本的能力。召回率是比率
tp / (tp + fn)
,其中tp
是真正例的數量,fn
是假負例的數量。從直觀上講,召回率是分類器找到所有正樣本的能力。F-beta 分數可以解釋為精確率和召回率的加權調和平均值,其中 F-beta 分數的最佳值為 1,最差值為 0。
F-beta 分數會以
beta
的係數來加權召回率,使其比精確度更重要。beta == 1.0
表示召回率和精確度同等重要。support (支持度) 是指
y_true
中每個類別出現的次數。對於超出 term:
binary
目標的支持度,是將 多類別 (multiclass) 和 多標籤 (multilabel) 資料視為一組二元問題的集合,每個標籤對應一個問題。對於 二元 (binary) 的情況,設定average='binary'
將會回傳pos_label
的指標。如果average
不是'binary'
,則會忽略pos_label
,並計算兩個類別的指標,然後進行平均或同時回傳(當average=None
時)。同樣地,對於 多類別 (multiclass) 和 多標籤 (multilabel) 的目標,所有labels
的指標會根據average
參數回傳或平均。使用labels
來指定要計算指標的標籤集合。請在使用者指南中閱讀更多資訊。
- 參數:
- y_true一維類陣列 (1d array-like),或標籤指示陣列 (label indicator array) / 稀疏矩陣 (sparse matrix)
真實(正確)的目標值。
- y_pred一維類陣列 (1d array-like),或標籤指示陣列 (label indicator array) / 稀疏矩陣 (sparse matrix)
分類器回傳的估計目標。
- beta浮點數 (float),預設值=1.0
F-score 中召回率相對於精確度的強度。
- labels類陣列 (array-like),預設值=None
當
average != 'binary'
時要包含的標籤集合,以及當average is None
時的標籤順序。資料中存在的標籤可以被排除,例如在多類別分類中排除「負類別」。可以包含資料中不存在的標籤,並將其「分配」0 個樣本。對於多標籤目標,標籤是欄索引。預設情況下,會使用y_true
和y_pred
中所有已排序的標籤。在 0.17 版本中變更:針對多類別問題改進了
labels
參數。- pos_label整數 (int)、浮點數 (float)、布林值 (bool) 或字串 (str),預設值=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-score 不介於精確度和召回率之間。
'samples'
:計算每個實例的指標,並找出它們的平均值(僅適用於多標籤分類,因為它與
accuracy_score
不同)。
- warn_for列表 (list)、元組 (tuple) 或集合 (set),供內部使用
這決定了在使用此函數僅回傳其指標之一時將發出的警告。
- sample_weight形狀為 (n_samples,) 的類陣列 (array-like),預設值=None
樣本權重。
- zero_division{“warn”, 0.0, 1.0, np.nan}, 預設值=”warn”
設定當出現除以零時要回傳的值
召回率:當沒有正向標籤時
精確度:當沒有正向預測時
F-score:兩者皆是
注意
如果設定為 “warn”,則其行為與 0 相同,但也會發出警告。
如果設定為
np.nan
,則會將這些值排除在平均值之外。
在 1.3 版本中新增:新增了
np.nan
選項。
- 回傳值:
- precision浮點數 (float) (如果 average 不是 None) 或浮點數陣列 (array of float),形狀 = [n_unique_labels]
精確度分數。
- recall浮點數 (float) (如果 average 不是 None) 或浮點數陣列 (array of float),形狀 = [n_unique_labels]
召回率分數。
- fbeta_score浮點數 (float) (如果 average 不是 None) 或浮點數陣列 (array of float),形狀 = [n_unique_labels]
F-beta 分數。
- supportNone (如果 average 不是 None) 或整數陣列 (array of int),形狀 = [n_unique_labels]
y_true
中每個標籤出現的次數。
注意
當
true positive + false positive == 0
時,精確度未定義。當true positive + false negative == 0
時,召回率未定義。當true positive + false negative + false positive == 0
時,f-score 未定義。在這種情況下,預設情況下,指標將設定為 0,並會引發UndefinedMetricWarning
。此行為可以使用zero_division
修改。參考資料
[1][2]範例
>>> import numpy as np >>> from sklearn.metrics import precision_recall_fscore_support >>> y_true = np.array(['cat', 'dog', 'pig', 'cat', 'dog', 'pig']) >>> y_pred = np.array(['cat', 'pig', 'dog', 'cat', 'cat', 'dog']) >>> precision_recall_fscore_support(y_true, y_pred, average='macro') (0.22..., 0.33..., 0.26..., None) >>> precision_recall_fscore_support(y_true, y_pred, average='micro') (0.33..., 0.33..., 0.33..., None) >>> precision_recall_fscore_support(y_true, y_pred, average='weighted') (0.22..., 0.33..., 0.26..., None)
可以計算每個標籤的精確度、召回率、F1 分數和支持度,而不是取平均值
>>> precision_recall_fscore_support(y_true, y_pred, average=None, ... labels=['pig', 'dog', 'cat']) (array([0. , 0. , 0.66...]), array([0., 0., 1.]), array([0. , 0. , 0.8]), array([2, 2, 2]))