【问题标题】:Does tf.keras.metrics.AUC work on multi-class problems?tf.keras.metrics.AUC 是否适用于多类问题?
【发布时间】:2020-02-26 01:10:12
【问题描述】:

我有一个多类分类问题,我想测量训练和测试数据的 AUC。

tf.keras 已经实现了 AUC 指标 (tf.keras.metrics.AUC),但我无法看到这个指标是否可以安全地用于多类问题。甚至,官方网页上的示例“不平衡数据分类”专门针对二元分类问题。

我已经实现了一个预测六个类的 CNN 模型,它有一个给出所有类概率的 softmax 层。我使用这个指标如下

self.model.compile(loss='categorical_crossentropy',
                       optimizer=Adam(hp.get("learning_rate")),
                       metrics=['accuracy', AUC()]),

并且代码执行没有任何问题。但是,有时我会看到一些对我来说很奇怪的结果。例如,模型报告的准确度为 0.78333336,AUC 等于 0.97327775,这可能吗?一个模型能有这么低的准确率和这么高的AUC吗?

我想知道,虽然代码没有给出任何错误,但 AUC 指标计算错误。

有人可以确认我这个指标是否支持多类分类问题?

【问题讨论】:

  • 我认为 ROC-AUC 不是评估您的 ML 问题的正确指标。它仅针对二元问题定义。但是,有一些考虑将它用于多类问题:stats.stackexchange.com/questions/2151/…。通常你使用tf.math.top_k 之类的东西,并评估你的网络在前 k 个预测中的次数(对于很多类,通常 k=1 和 k=5)。

标签: python python-3.x tensorflow2.0 tf.keras auc


【解决方案1】:

multi_label 参数是 tf.keras.metrics.AUC 调用中的布尔值。

如果True不是默认值),多标签数据将被视为这样,因此 AUC 会为每个标签单独计算,然后跨标签平均。

False(默认)时,数据会在AUC计算前被扁平化为一个标签。在后一种情况下,当将多标签数据传递给 AUC 时,每个标签预测对都被视为一个单独的数据点。

文档建议将其设置为False 用于多类数据。

例如:tf.keras.metrics.AUC(multi_label = True)

有关详细信息,请参阅AUC Documentation

【讨论】:

  • 如您所说,文档建议在多类问题中使用multi_label=False。所以,总的来说,你推荐什么?在我的实验中,当我使用两个带有 softmax 的神经元作为二元分类器,并使用带有 multi_label=True 的 AUC 作为在训练期间监控的指标时,我看到了更好的性能。但是,我不确定这是不是真的。
  • 另外,目前尚不清楚multi_label=False 何时在 AUC 计算之前将数据扁平化为单个标签。我们知道 AUC 需要分数,这里不清楚多个分数如何转换为一个分数。可能是选择了最大分数,然后将其用于 AUC 计算。
猜你喜欢
  • 1970-01-01
  • 2018-12-05
  • 2012-12-02
  • 1970-01-01
  • 2012-02-14
  • 2011-03-11
  • 2011-11-08
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多