在均衡的验证集中,我们是否可能具有很高的验证准确性以及较低的灵敏度和特异性?

时间:2019-09-06 12:33:21

标签: python machine-learning keras deep-learning

我有问题。我正在将Keras与TensorFlow后端一起用于图像识别。分为正面任务和负面任务两类。

我正在使用具有密集层(不是冻结)的预训练模型(具有冻结权重)。

我报告了一个问题:经过100个训练后,我得到了以下结果:

  

Epoch 98/100 488/488 [=============================]-222秒   454毫秒/步-损耗:0.0774-精度:0.9720-灵敏度:0.9746-   特异性:0.9683-val_loss:0.0660-val_acc:0.9697-   val_灵敏度:0.4412-val_特异性:0.5368
时代99/100   488/488 [=============================]-221秒453ms /步-损耗:   0.0791-acc:0.9687-灵敏度:0.9729-特异性:0.9647-val_loss:0.0930-val_acc:0.9570-val_灵敏度:0.5428-   val_specificity:0.4245
时代100/100 488/488   [=============================]-221秒453ms /步-损耗:0.0775-   acc:0.9693-敏感性:0.9715-特异性:0.9655-val_loss:   0.0751-val_acc:0.9684-val_灵敏度:0.4482-val_specificity:0.5285

我的准确性为96%,损失为0.0751(二进制交叉熵),敏感性和特异性均较低。类不平衡可能是一个问题,但是我有2600个测试实例,其中正类有1302,负类有1298。

如果我们的准确度为+ 90%,则可以预期,另外两个指标之一可以提供良好的结果分类。如果这些指标用于评估每个班级的命中率,并且我们具有很高的准确性,那么如何为两个指标获得较低的价值?

我不知道这里发生了什么,有人可以帮助我吗?

以下是我的敏感性和特异性功能:

def sensitivity(y_true, y_pred):
    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
    return true_positives / (possible_positives + K.epsilon())
def specificity(y_true, y_pred):
    true_negatives = K.sum(K.round(K.clip((1-y_true) * (1-y_pred), 0, 1)))
    possible_negatives = K.sum(K.round(K.clip(1-y_true, 0, 1)))
    return true_negatives / (possible_negatives + K.epsilon())

我为我的英语不好对不起。谢谢您的帮助!

我尝试对图像进行二进制分类。我使用转移学习,并添加了两个评估模型的指标:敏感性和特异性。

如果在具有平衡验证数据的二进制分类任务中,我们具有很高的准确性,那么我们希望在验证敏感性或特异性方面获得很好的结果。模型或指标评估存在一些不一致之处。

编辑9/9 我尝试使用另一种转移学习或简单模型,得到了相同的结果。我真的不明白这是什么。

  

Epoch 100/100 488/488 [=============================]-217s 445ms /步-损耗: 0.0575-acc:0.9767-灵敏度:0.9793-特异性:0.9737-val_loss:0.0731-val_acc:0.9653-val_灵敏度:0.4904-val_specificity:0.4852

0 个答案:

没有答案