精確度分數#
- sklearn.metrics.precision_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')[原始碼]#
計算精確度。
精確度是
tp / (tp + fp)
的比率,其中tp
是真正例的數量,而fp
是假正例的數量。直觀來說,精確度是指分類器不將負樣本標記為正樣本的能力。最佳值為 1,最差值為 0。
除了
binary
目標以外的支援,是透過將 多類別 和 多標籤 資料視為一組二元問題的集合(每個標籤一個)來實現的。對於 二元 的情況,設定average='binary'
將會回傳pos_label
的精確度。如果average
不是'binary'
,則pos_label
會被忽略,並且會計算兩個類別的精確度,然後取平均值或同時回傳(當average=None
時)。類似地,對於 多類別 和 多標籤 目標,所有labels
的精確度會根據average
參數而回傳或取平均值。使用labels
指定要計算精確度的標籤集。請在 使用者指南 中閱讀更多內容。
- 參數:
- y_true一維類陣列,或標籤指示陣列/稀疏矩陣
真實(正確)的目標值。
- y_pred一維類陣列,或標籤指示陣列/稀疏矩陣
分類器回傳的預估目標值。
- labels類陣列,預設為None
當
average != 'binary'
時要包含的標籤集,以及當average is None
時的標籤順序。可以排除資料中存在的標籤,例如在多類別分類中排除「負類別」。可以包含資料中不存在的標籤,並且會被「分配」 0 個樣本。對於多標籤目標,標籤是欄索引。預設情況下,會使用y_true
和y_pred
中所有已排序的標籤。在 0.17 版本中變更:為多類別問題改進了
labels
參數。- pos_labelint、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 分數不在精確度和召回率之間。
'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
選項。
- 回傳值:
- precisionfloat (如果 average 不是 None) 或形狀為 (n_unique_labels,) 的 float 陣列
二元分類中正類別的精確度,或多類別任務中每個類別精確度的加權平均值。
另請參閱
精確度-召回率-F 分數支持 (precision_recall_fscore_support)
計算每個類別的精確度、召回率、F 值和支持度。
召回率分數 (recall_score)
計算比率
tp / (tp + fn)
,其中tp
是真正例的數量,而fn
是假負例的數量。PrecisionRecallDisplay.from_estimator
給定估計器和一些資料,繪製精確度-召回率曲線。
PrecisionRecallDisplay.from_predictions
給定二元類別預測,繪製精確度-召回率曲線。
多標籤混淆矩陣 (multilabel_confusion_matrix)
計算每個類別或樣本的混淆矩陣。
注意事項
當
true positive + false positive == 0
時,精確度會回傳 0 並引發UndefinedMetricWarning
。可以使用zero_division
修改此行為。範例
>>> import numpy as np >>> from sklearn.metrics import precision_score >>> y_true = [0, 1, 2, 0, 1, 2] >>> y_pred = [0, 2, 1, 0, 0, 1] >>> precision_score(y_true, y_pred, average='macro') 0.22... >>> precision_score(y_true, y_pred, average='micro') 0.33... >>> precision_score(y_true, y_pred, average='weighted') 0.22... >>> precision_score(y_true, y_pred, average=None) array([0.66..., 0. , 0. ]) >>> y_pred = [0, 0, 0, 0, 0, 0] >>> precision_score(y_true, y_pred, average=None) array([0.33..., 0. , 0. ]) >>> precision_score(y_true, y_pred, average=None, zero_division=1) array([0.33..., 1. , 1. ]) >>> precision_score(y_true, y_pred, average=None, zero_division=np.nan) array([0.33..., 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]] >>> precision_score(y_true, y_pred, average=None) array([0.5, 1. , 1. ])