sklearn.metrics.precision_recall_fscore_support

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时达到最差值。

beta参数对于召回率的F-beta评分权重比对于精确度的权重高。 beta == 1.0表示召回率和精确度同等重要。

支持度是y_true中每个类的出现次数。

如果pos_label为None且采用二进制分类,则该函数将返回平均精度、召回率和F度量(如果average是'micro','macro','weighted'或'samples'之一)。

用户指南中阅读更多内容10

参数 说明
y_true 1d array-like, or label indicator array / sparse matrix
真实目标值。
y_pred 1d array-like, or label indicator array / sparse matrix
分类器返回的估计目标。
beta float, 1.0 by default
F-score召回与精度的强度对比。
labels list, optional
当average!='binary'时要包括的一组标签,如果average是None,则是标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。
pos_label str or int, 1 by default
如果average ='binary'且数据为二进制的报告类。如果数据是多类或多标签的,则将被忽略;设置labels=[pos_label]和average!='binary'将仅报告该标签的分数。
average string, [None (default)| ‘binary’| ‘micro’| ‘macro’| ‘samples’|‘weighted’]
如果为None,则返回每个类的分数。否则,将根据数据的平均表现确定类型:
- 'binary':
仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。
- 'micro':
通过计算真正例、假负例和假正例的总数来全局计算指标。
- 'macro':
计算每个标签的指标,并找到其未加权平均值。 没有考虑标签不平衡。
- 'weighted':
计算每个标签的指标,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。
- 'samples':
计算每个实例的指标,并找到它们的平均值(仅对不同于accuracy_score的多标签分类有意义)。
warn_for tuple or set, for internal use
这确定了在使用此函数仅返回其指标之一的情况下将发出哪些警告。
sample_weight array-like of shape (n_samples,), default=None
样本权重。
zero_division “warn”, 0 or 1, default=”warn”
设置零分频时的返回值:

- 召回:没有正例标签时

- 精度:没有正例预测时

f-score:发生以上两种情况时

如果设置为“ warn”,则该值为0,但也会发出警告。
返回值 说明
precision float (if average is not None) or array of float, shape = [n_unique_labels]
recall float (if average is not None) or array of float, , shape = [n_unique_labels]
fbeta_score float (if average is not None) or array of float, shape = [n_unique_labels]
support None (if average is not None) or array of int, shape = [n_unique_labels]
y_true中每个标签的出现次数。

当真正例+假正例== 0时,精度是不确定的;当真正例+假负例== 0时,召回率是不确定的。在这种情况下,默认情况下,度量将设置为0,f-score也将设置为0,并且将引发UndefinedMetricWarning。可以使用zero_division修改此行为。

参考

1 Wikipedia entry for the Precision and recall

2 Wikipedia entry for the F1-score

3 Discriminative Methods for Multi-labeled Classification Advances in Knowledge Discovery and Data Mining (2004), pp. 22-30 by Shantanu Godbole, Sunita Sarawagi

示例

>>> 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([222]))