精確率、召回率、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_truey_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 修改。

參考資料

範例

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