mars.learn.metrics.precision_recall_fscore_support#

mars.learn.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', session=None, run_kwargs=None)[来源]#

计算每个类的精确度、召回率、F-measure和支持度

精度是比率 tp / (tp + fp),其中 tp 是 真正例的数量,fp 是假正例的数量。精度在直觉上是分类器不将负样本标记为正样本的能力。

召回率是比率 tp / (tp + fn),其中 tp 是真正例的数量,fn 是假负例的数量。召回率直观上是分类器找到所有正样本的能力。

F-beta 分数可以解释为精确率和召回率的加权调和平均值,其中 F-beta 分数在 1 时达到最佳值,在 0 时达到最差值。

F-beta 得分更重视召回率而非精确率,权重因子为 betabeta == 1.0 表示召回率和精确率同等重要。

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

如果 pos_label is None 并且在二元分类中,这个函数返回平均精度、召回率和F-measure,如果 average'micro''macro''weighted''samples' 之一。

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

Parameters
  • y_true (一维数组-like,或标签指示数组 / 稀疏矩阵) – 真实的(正确的)目标值。

  • y_pred (一维数组或标签指示数组 / 稀疏矩阵) – 分类器返回的估计目标。

  • beta (float, 默认值为1.0) – F分数中回忆率与精准率的权衡强度。

  • labels (list, optional) – 当 average != 'binary' 时要包含的标签集,以及如果 average is None 时的顺序。在数据中存在的标签可以被排除,例如计算多类平均值时忽略大多数负类,而在数据中不存在的标签将导致宏平均中的0个组件。对于多标签目标,标签是列索引。默认情况下,y_truey_pred 中的所有标签按顺序使用。

  • pos_label (strint, 默认为1) – 如果 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':

    为每个标签计算指标,并根据支持(每个标签的真实实例数量)找到它们的加权平均。这修改了“宏”以考虑标签不平衡;可能导致 F-score 不在精确度和召回率之间。

    'samples':

    为每个实例计算指标,并找到它们的平均值(仅对多标签分类有意义,在这种情况下这与 accuracy_score() 不同)。

  • warn_for (元组集合, 仅供内部使用) – 这决定了在该函数仅用于返回其一个指标的情况下,会发出哪些警告。

  • sample_weight (类数组,形状 (n_samples,), 默认值=None) – 样本权重。

  • zero_division ("warn", 01, 默认="warn") –

    设置当发生零除法时返回的值:
    • 召回率:当没有正标签时

    • 精准率:当没有正预测时

    • F-score:两者都没有

    如果设置为“warn”,则表现为0,但也会产生警告。

Returns

  • precision (浮点数(如果平均值不为None)或浮点数组,形状 = [n_unique_labels])

  • recall (浮点数(如果平均值不为None)或浮点数组,形状 = [n_unique_labels])

  • fbeta_score (浮点数(如果平均值不为None)或浮点数组,形状 = [n_unique_labels])

  • support (None(如果平均值不为None)或整型数组,形状 = [n_unique_labels]) – 每个标签在 y_true 中出现的次数。

参考文献

1

精确度和召回率的维基百科条目

2

F1分数的维基百科条目

3

多标签分类的判别方法 知识发现与数据挖掘进展 (2004), 第22-30页 作者:Shantanu Godbole, Sunita Sarawagi

示例

>>> import numpy as np
>>> from mars.learn.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]))

备注

true positive + false positive == 0 时,精确度未定义; 当 true positive + false negative == 0 时,召回率未定义。在这种情况下,默认情况下该度量将被设置为0,F-score也将如此,并且 UndefinedMetricWarning 将被引发。这种行为可以通过 zero_division 进行修改。