当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python tf.keras.metrics.AUC用法及代码示例

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

继承自:MetricLayerModule

用法

tf.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
)

参数

  • num_thresholds (可选)默认为 200。离散化 roc 曲线时使用的阈值数。值必须 > 1。
  • curve (可选)指定要计算的曲线的名称,'ROC' [默认] 或 'PR' 用于 Precision-Recall-curve。
  • summation_method (可选)指定黎曼求和法用过的。 'interpolation'(默认)应用mid-point求和方案ROC.对于PR-AUC,插入(真/假)阳性,但不插入精确率(详见 Davis & Goadrich 2006); 'minoring' 对递增区间应用左求和,对递减区间应用右求和; 'majoring' 则相反。
  • name (可选)指标实例的字符串名称。
  • dtype (可选)度量结果的数据类型。
  • thresholds (可选)用作离散化曲线阈值的浮点值列表。如果设置,num_thresholds 参数将被忽略。值应在 [0, 1] 中。端点阈值等于 {-epsilon, 1+epsilon} 对于小的正 epsilon 值将自动包含在这些阈值中,以正确处理等于 0 或 1 的预测。
  • multi_label 布尔值,表示是否应该这样对待多标签数据,其中 AUC 是针对每个标签单独计算,然后在标签之间进行平均,或者(当为 False 时)是否应该在 AUC 计算之前将数据展平为单个标签。在后一种情况下,当多标签数据传递到 AUC 时,每个 label-prediction 对都被视为一个单独的数据点。对于multi-class 数据,应设置为 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 不应用于multi-class 数据。
  • from_logits 布尔值,指示预测(update_state 中的 y_pred)是概率还是 sigmoid logits。根据经验,当使用 keras 损失时,损失的 from_logits 构造函数参数应该与 AUC from_logits 构造函数参数匹配。

属性

  • thresholds 用于评估 AUC 的阈值。

ROC(接收器操作特征;默认)或 PR(精确召回)曲线的 AUC(曲线下面积)是二元分类器的质量度量。与准确度不同,与 cross-entropy 损失一样,ROC-AUC 和 PR-AUC 评估模型的所有操作点。

此类使用黎曼和来近似 AUC。在度量累积阶段,预测在预定义的桶中按值累积。然后通过插值 per-bucket 平均值来计算 AUC。这些桶定义了评估的操作点。

该指标创建四个局部变量,true_positives , true_negatives , false_positivesfalse_negatives,用于计算 AUC。为了离散化 AUC 曲线,使用一组线性间隔的阈值来计算成对的召回率和精度值。因此,ROC-curve 下的区域是通过误报率使用召回值的高度来计算的,而 PR-curve 下的区域是使用召回率的精度值的高度来计算的。

该值最终以 auc 的形式返回,这是一种幂等运算,用于计算精度与召回值的离散曲线下的面积(使用上述变量计算)。 num_thresholds 变量控制离散化程度,阈值越多越接近真实 AUC。根据 num_thresholds 的不同,近似的质量可能会有很大差异。 thresholds 参数可用于手动指定阈值,从而更均匀地分割预测。

为了获得真实 AUC 的最佳近似值,predictions 应大致均匀分布在 0、1 范围内。如果不是这种情况,AUC 近似值的质量可能会很差。将 summation_method 设置为 'minoring' 或 'majoring' 可以通过提供 AUC 的下限或上限估计值来帮助量化近似误差。

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

单机使用:

m = tf.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().numpy()
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().numpy()
1.0

compile() API 的用法:

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

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

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.metrics.AUC。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。