Keras 3 API 文档 / 指标 / 基于真/假阳性和真/假阴性的分类指标

基于真/假阳性和真/假阴性的分类指标

[源]

AUC

keras.metrics.AUC(
    num_thresholds=200,
    curve="ROC",
    summation_method="interpolation",
    name=None,
    dtype=None,
    thresholds=None,
    multi_label=False,
    num_labels=None,
    label_weights=None,
    from_logits=False,
)

近似计算 ROC 或 PR 曲线的 AUC (曲线下面积)。

ROC (接收者操作特征;默认) 或 PR (精确率召回率) 曲线的 AUC (曲线下面积) 是二元分类器质量度量指标。与准确率不同,但与交叉熵损失类似,ROC-AUC 和 PR-AUC 评估了模型的所有工作点。

此类使用黎曼和近似计算 AUC。在指标累积阶段,预测值按预定义的分桶进行累积。然后通过对每个分桶的平均值进行插值计算 AUC。这些分桶定义了评估的工作点。

此指标创建了四个局部变量:true_positives (真阳性), true_negatives (真阴性), false_positives (假阳性) 和 false_negatives (假阴性),这些变量用于计算 AUC。为了对 AUC 曲线进行离散化,使用一组线性间隔的阈值来计算成对的召回率和精确率值。因此,ROC 曲线下面积使用召回率值的高度乘以假阳性率来计算,而 PR 曲线下面积使用精确率值的高度乘以召回率来计算。

该值最终作为 auc 返回,这是一个幂等操作,它计算精确率与召回率离散曲线下的面积(使用上述变量计算)。num_thresholds 变量控制离散化程度,阈值数量越多,对真实 AUC 的近似越精确。近似的质量可能会根据 num_thresholds 显著变化。thresholds 参数可用于手动指定阈值,以更均匀地分割预测。

为了最好地近似真实的 AUC,predictions(预测值)应大致均匀分布在 [0, 1] 范围内(如果 from_logits=False)。如果不是这种情况,AUC 近似的质量可能会很差。将 summation_method 设置为 'minoring' 或 'majoring' 可以通过提供 AUC 的下界或上界估计来帮助量化近似误差。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

参数

  • num_thresholds: (可选) 对 roc 曲线进行离散化时使用的阈值数量。值必须大于 1。默认为 200
  • curve: (可选) 指定要计算的曲线名称,'ROC'(默认)或表示精确率-召回率曲线的 'PR'
  • summation_method: (可选) 指定使用的 黎曼求和方法。'interpolation'(默认)对 ROC 应用中点求和方案。对于 PR-AUC,插值计算(真/假)阳性,但不插值精确率这个比率(详情请参阅 Davis & Goadrich 2006);'minoring' 对递增区间应用左侧求和,对递减区间应用右侧求和;'majoring' 则相反。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。
  • thresholds: (可选) 用于对曲线进行离散化的浮点阈值列表。如果设置,将忽略 num_thresholds 参数。值应在 [0, 1] 范围内。对于一个小的正 epsilon 值,将自动包含等于 {-epsilon, 1+epsilon} 的端点阈值,以正确处理恰好等于 0 或 1 的预测。
  • multi_label: 布尔值,指示是否应将多标签数据视为多标签情况(其中对每个标签单独计算 AUC,然后对标签进行平均),或者(当为 False 时)在计算 AUC 之前是否应将数据展平为单个标签。在后一种情况下,当将多标签数据传递给 AUC 时,每个标签-预测对都被视为一个单独的数据点。对于多类别数据,应设置为 False
  • num_labels: (可选) 标签数量,当 multi_label 为 True 时使用。如果未指定 num_labels,则在第一次调用 update_state 时创建状态变量。
  • label_weights: (可选) 用于计算多标签数据 AUC 的非负权重列表、数组或张量。当 multi_label 为 True 时,权重应用于单个标签的 AUC,然后进行平均以生成多标签 AUC。当为 False 时,权重用于在展平数据上计算混淆矩阵时,对单个标签预测进行加权。请注意,这与 class_weights 不同,class_weights 根据标签的值对样本进行加权,而 label_weights 仅取决于展平前该标签的索引;因此,label_weights 不应用于多类别数据。
  • from_logits: 布尔值,指示预测值(在 update_state 中的 y_pred)是概率还是 sigmoid logit。通常,当使用 Keras 损失函数时,损失函数的 from_logits 构造函数参数应与 AUC 的 from_logits 构造函数参数匹配。

示例

>>> m = keras.metrics.AUC(num_thresholds=3)
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
>>> # threshold values are [0 - 1e-7, 0.5, 1 + 1e-7]
>>> # tp = [2, 1, 0], fp = [2, 0, 0], fn = [0, 1, 2], tn = [0, 2, 2]
>>> # tp_rate = recall = [1, 0.5, 0], fp_rate = [1, 0, 0]
>>> # auc = ((((1 + 0.5) / 2) * (1 - 0)) + (((0.5 + 0) / 2) * (0 - 0)))
>>> #     = 0.75
>>> m.result()
0.75
>>> m.reset_state()
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9],
...                sample_weight=[1, 0, 0, 1])
>>> m.result()
1.0

compile() API 一起使用

# Reports the AUC of a model outputting a probability.
model.compile(optimizer='sgd',
              loss=keras.losses.BinaryCrossentropy(),
              metrics=[keras.metrics.AUC()])

# Reports the AUC of a model outputting a logit.
model.compile(optimizer='sgd',
              loss=keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[keras.metrics.AUC(from_logits=True)])

[源]

Precision

keras.metrics.Precision(
    thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)

计算预测相对于标签的精确率。

此指标创建两个局部变量:true_positives (真阳性) 和 false_positives (假阳性),用于计算精确率。该值最终作为 precision 返回,这是一个幂等操作,简单地将 true_positives 除以 true_positivesfalse_positives 的总和。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果设置了 top_k,我们将计算精确率,其方式是衡量在一个批次条目中,预测值最高的 top-k 类别中,平均有多少个类别是正确的,并且可以在该条目的标签中找到。

如果指定了 class_id,我们通过只考虑批次中 class_id 高于阈值和/或在 top-k 最高预测中的条目来计算精确率,然后计算其中 class_id 确实是正确标签的比例。

参数

  • thresholds: (可选) 一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。如果既未设置 thresholds 也未设置 top_k,则默认使用 thresholds=0.5 计算精确率。
  • top_k: (可选) 默认未设置。一个整数值,指定计算精确率时要考虑的 top-k 预测。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.Precision()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0
>>> # With top_k=2, it will calculate precision over y_true[:2]
>>> # and y_pred[:2]
>>> m = keras.metrics.Precision(top_k=2)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result()
0.0
>>> # With top_k=4, it will calculate precision over y_true[:4]
>>> # and y_pred[:4]
>>> m = keras.metrics.Precision(top_k=4)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result()
0.5

compile() API 一起使用

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=[keras.metrics.Precision()])

与设置了 from_logits=True 的损失函数一起使用

model.compile(optimizer='adam',
              loss=keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[keras.metrics.Precision(thresholds=0)])

[源]

Recall

keras.metrics.Recall(
    thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)

计算预测相对于标签的召回率。

此指标创建两个局部变量:true_positives (真阳性) 和 false_negatives (假阴性),用于计算召回率。该值最终作为 recall 返回,这是一个幂等操作,简单地将 true_positives 除以 true_positivesfalse_negatives 的总和。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果设置了 top_k,将计算召回率,其方式是衡量在一个批次条目中,标签中的类别平均有多少个在 top-k 预测中。

如果指定了 class_id,我们通过只考虑批次中 class_id 在标签中的条目来计算召回率,然后计算其中 class_id 高于阈值和/或在 top-k 预测中的比例。

参数

  • thresholds: (可选) 一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。如果既未设置 thresholds 也未设置 top_k,则默认使用 thresholds=0.5 计算召回率。
  • top_k: (可选) 默认未设置。一个整数值,指定计算召回率时要考虑的 top-k 预测。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.Recall()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

compile() API 一起使用

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=[keras.metrics.Recall()])

与设置了 from_logits=True 的损失函数一起使用

model.compile(optimizer='adam',
              loss=keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[keras.metrics.Recall(thresholds=0)])

[源]

TruePositives

keras.metrics.TruePositives(thresholds=None, name=None, dtype=None)

计算真阳性数量。

如果给定 sample_weight,则计算真阳性权重的总和。此指标创建一个局部变量 true_positives,用于跟踪真阳性数量。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

参数

  • thresholds: (可选) 默认为 0.5。一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.TruePositives()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[源]

TrueNegatives

keras.metrics.TrueNegatives(thresholds=None, name=None, dtype=None)

计算真阴性数量。

如果给定 sample_weight,则计算真阴性权重的总和。此指标创建一个局部变量 accumulator,用于跟踪真阴性数量。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

参数

  • thresholds: (可选) 默认为 0.5。一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.TrueNegatives()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[源]

FalsePositives

keras.metrics.FalsePositives(thresholds=None, name=None, dtype=None)

计算假阳性数量。

如果给定 sample_weight,则计算假阳性权重的总和。此指标创建一个局部变量 accumulator,用于跟踪假阳性数量。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

参数

  • thresholds: (可选) 默认为 0.5。一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.FalsePositives()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[源]

FalseNegatives

keras.metrics.FalseNegatives(thresholds=None, name=None, dtype=None)

计算假阴性数量。

如果给定 sample_weight,则计算假阴性权重的总和。此指标创建一个局部变量 accumulator,用于跟踪假阴性数量。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

参数

  • thresholds: (可选) 默认为 0.5。一个浮点值,或一个 Python 列表/元组,包含 [0, 1] 范围内的浮点阈值。将阈值与预测值进行比较,以确定预测的真值(即,高于阈值为 True,低于阈值为 False)。如果与设置 from_logits=True 的损失函数一起使用(即,未对预测应用 sigmoid),则 thresholds 应设置为 0。为每个阈值生成一个指标值。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.FalseNegatives()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[源]

PrecisionAtRecall

keras.metrics.PrecisionAtRecall(
    recall, num_thresholds=200, class_id=None, name=None, dtype=None
)

计算召回率 >= 指定值时的最佳精确率。

此指标创建了四个局部变量:true_positives (真阳性), true_negatives (真阴性), false_positives (假阳性) 和 false_negatives (假阴性),这些变量用于计算给定召回率下的精确率。将计算给定召回率值的阈值,并用于评估相应的精确率。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果指定了 class_id,我们通过只考虑批次中 class_id 高于阈值预测的条目来计算精确率,然后计算其中 class_id 确实是正确标签的比例。

参数

  • recall: [0, 1] 范围内的标量值。
  • num_thresholds: (可选) 默认为 200。用于匹配给定召回率的阈值数量。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.PrecisionAtRecall(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[2, 2, 2, 1, 1])
>>> m.result()
0.33333333

compile() API 一起使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.PrecisionAtRecall(recall=0.8)])

[源]

RecallAtPrecision

keras.metrics.RecallAtPrecision(
    precision, num_thresholds=200, class_id=None, name=None, dtype=None
)

计算精确率 >= 指定值时的最佳召回率。

对于给定的分数-标签分布,所需的精确率可能无法达到,在这种情况下,召回率返回 0.0。

此指标创建了四个局部变量:true_positives (真阳性), true_negatives (真阴性), false_positives (假阳性) 和 false_negatives (假阴性),这些变量用于计算给定精确率下的召回率。将计算给定精确率值的阈值,并用于评估相应的召回率。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果指定了 class_id,我们通过只考虑批次中 class_id 高于阈值预测的条目来计算精确率,然后计算其中 class_id 确实是正确标签的比例。

参数

  • precision: [0, 1] 范围内的标量值。
  • num_thresholds: (可选) 默认为 200。用于匹配给定精确率的阈值数量。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.RecallAtPrecision(0.8)
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
>>> m.result()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9],
...                sample_weight=[1, 0, 0, 1])
>>> m.result()
1.0

compile() API 一起使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.RecallAtPrecision(precision=0.8)])

[源]

SensitivityAtSpecificity

keras.metrics.SensitivityAtSpecificity(
    specificity, num_thresholds=200, class_id=None, name=None, dtype=None
)

计算特异性 >= 指定值时的最佳敏感度。

Sensitivity (敏感度) 衡量被正确识别为阳性的实际阳性样本的比例 (tp / (tp + fn))Specificity (特异性) 衡量被正确识别为阴性的实际阴性样本的比例 (tn / (tn + fp))

此指标创建了四个局部变量:true_positives (真阳性), true_negatives (真阴性), false_positives (假阳性) 和 false_negatives (假阴性),这些变量用于计算给定特异性下的敏感度。将计算给定特异性值的阈值,并用于评估相应的敏感度。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果指定了 class_id,我们通过只考虑批次中 class_id 高于阈值预测的条目来计算精确率,然后计算其中 class_id 确实是正确标签的比例。

有关特异性和敏感度的更多信息,请参阅 以下链接

参数

  • specificity: [0, 1] 范围内的标量值。
  • num_thresholds: (可选) 默认为 200。用于匹配给定特异性的阈值数量。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.SensitivityAtSpecificity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[1, 1, 2, 2, 1])
>>> m.result()
0.333333

compile() API 一起使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.SensitivityAtSpecificity(specificity=0.5)])

[源]

SpecificityAtSensitivity

keras.metrics.SpecificityAtSensitivity(
    sensitivity, num_thresholds=200, class_id=None, name=None, dtype=None
)

计算敏感度 >= 指定值时的最佳特异性。

Sensitivity (敏感度) 衡量被正确识别为阳性的实际阳性样本的比例 (tp / (tp + fn))Specificity (特异性) 衡量被正确识别为阴性的实际阴性样本的比例 (tn / (tn + fp))

此指标创建了四个局部变量:true_positives (真阳性), true_negatives (真阴性), false_positives (假阳性) 和 false_negatives (假阴性),这些变量用于计算给定敏感度下的特异性。将计算给定敏感度值的阈值,并用于评估相应的特异性。

如果 sample_weightNone,权重默认为 1。使用 sample_weight 为 0 来屏蔽值。

如果指定了 class_id,我们通过只考虑批次中 class_id 高于阈值预测的条目来计算精确率,然后计算其中 class_id 确实是正确标签的比例。

有关特异性和敏感度的更多信息,请参阅 以下链接

参数

  • sensitivity: [0, 1] 范围内的标量值。
  • num_thresholds: (可选) 默认为 200。用于匹配给定敏感度的阈值数量。
  • class_id: (可选) 我们希望计算二元指标的整数类别 ID。这必须在半开区间 [0, num_classes) 内,其中 num_classes 是预测值的最后一个维度。
  • name: (可选) 指标实例的字符串名称。
  • dtype: (可选) 指标结果的数据类型。

示例

>>> m = keras.metrics.SpecificityAtSensitivity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.66666667
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[1, 1, 2, 2, 2])
>>> m.result()
0.5

compile() API 一起使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.SpecificityAtSensitivity()])

[源]

F1Score

keras.metrics.F1Score(average=None, threshold=None, name="f1_score", dtype=None)

计算 F-1 分数。

公式

f1_score = 2 * (precision * recall) / (precision + recall)

这是精确率和召回率的调和平均数。其输出范围是 [0, 1]。它适用于多类别和多标签分类。

参数

  • average: 对数据执行的平均类型。可接受的值为 None"micro""macro""weighted"。默认为 None。如果为 None,则不执行平均,result() 将返回每个类别的分数。如果为 "micro",则通过计算总真阳性、假阴性和假阳性来全局计算指标。如果为 "macro",则计算每个标签的指标并返回其未加权平均值。这不考虑标签不平衡。如果为 "weighted",则计算每个标签的指标,并返回按支持(每个标签的真实实例数量)加权的平均值。这修改了 "macro" 以考虑标签不平衡。它可能导致分数不在精确率和召回率之间。
  • threshold: y_pred 中大于 threshold 的元素转换为 1,其余转换为 0。如果 thresholdNone,则将 y_pred 的 argmax 转换为 1,其余转换为 0。
  • name: 可选。指标实例的字符串名称。
  • dtype: 可选。指标结果的数据类型。

返回值

  • F-1 分数: 浮点数。

示例

>>> metric = keras.metrics.F1Score(threshold=0.5)
>>> y_true = np.array([[1, 1, 1],
...                    [1, 0, 0],
...                    [1, 1, 0]], np.int32)
>>> y_pred = np.array([[0.2, 0.6, 0.7],
...                    [0.2, 0.6, 0.6],
...                    [0.6, 0.8, 0.0]], np.float32)
>>> metric.update_state(y_true, y_pred)
>>> result = metric.result()
array([0.5      , 0.8      , 0.6666667], dtype=float32)

[源]

FBetaScore

keras.metrics.FBetaScore(
    average=None, beta=1.0, threshold=None, name="fbeta_score", dtype=None
)

计算 F-Beta 分数。

公式

b2 = beta ** 2
f_beta_score = (1 + b2) * (precision * recall) / (precision * b2 + recall)

这是精确率和召回率的加权调和平均数。其输出范围是 [0, 1]。它适用于多类别和多标签分类。

参数

  • average: 在多类别情况下,对每个类别的结果执行的平均类型。可接受的值为 None"micro""macro""weighted"。默认为 None。如果为 None,则不执行平均,result() 将返回每个类别的分数。如果为 "micro",则通过计算总真阳性、假阴性和假阳性来全局计算指标。如果为 "macro",则计算每个标签的指标并返回其未加权平均值。这不考虑标签不平衡。如果为 "weighted",则计算每个标签的指标,并返回按支持(每个标签的真实实例数量)加权的平均值。这修改了 "macro" 以考虑标签不平衡。它可能导致分数不在精确率和召回率之间。
  • beta: 确定在精确率和召回率的调和平均数中给予召回率的权重(参见上面的伪代码公式)。默认为 1
  • threshold: y_pred 中大于 threshold 的元素转换为 1,其余转换为 0。如果 thresholdNone,则将 y_pred 的 argmax 转换为 1,其余转换为 0。
  • name: 可选。指标实例的字符串名称。
  • dtype: 可选。指标结果的数据类型。

返回值

  • F-Beta 分数: 浮点数。

示例

>>> metric = keras.metrics.FBetaScore(beta=2.0, threshold=0.5)
>>> y_true = np.array([[1, 1, 1],
...                    [1, 0, 0],
...                    [1, 1, 0]], np.int32)
>>> y_pred = np.array([[0.2, 0.6, 0.7],
...                    [0.2, 0.6, 0.6],
...                    [0.6, 0.8, 0.0]], np.float32)
>>> metric.update_state(y_true, y_pred)
>>> result = metric.result()
>>> result
[0.3846154 , 0.90909094, 0.8333334 ]