maxframe.learn.metrics.precision_recall_fscore_support#

maxframe.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', execute=False, session=None, run_kwargs=None)[源代码]#

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

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

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

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

F-beta 分数通过因子 beta 给予召回率比精度更高的权重。beta == 1.0 表示召回率和精度同样重要。

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

如果 pos_label is None 且是二分类任务,当 average'micro''macro''weighted''samples' 之一时,此函数返回平均精度、召回率和 F 值。

更多内容请参见 用户指南

参数:
  • 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 分数中召回率与精度的权重比。

  • labels (list, optional) -- 当 average != 'binary' 时要包括的标签集,以及当 average is None 时的顺序。数据中存在的标签可以被排除,例如在计算多类平均值时忽略多数负类;而在数据中不存在的标签在宏平均时将导致 0 成分。对于多标签目标,标签是列索引。默认情况下,y_truey_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 分数不在精度和召回率之间。'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") -- 设置在零除时返回的值: - recall:当没有正标签时 - precision:当没有正预测时 - f-score:两者皆是 如果设置为 "warn",则行为与 0 相同,但也会引发警告。

返回:

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

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

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

  • support (None (如果 average 不为 None) 或整数数组,形状 = [n_unique_labels]) —— y_true 中每个标签的出现次数。

引用

示例

>>> import numpy as np
>>> from maxframe.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 分数也是如此,并会引发 UndefinedMetricWarning。此行为可以通过 zero_division 修改。