训练模型并支持召回率/精度的最佳方法是什么?

时间:2018-07-03 15:12:31

标签: python tensorflow classification precision

我有一个二进制分类问题,我的数据集由5%的阳性标签组成。我正在使用张量流训练我的模型。这是我在训练中的结果:

Step 3819999: loss = 0.22 (0.004 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3820999: loss = 0.21 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3821999: loss = 0.15 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3822999: loss = 0.15 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

提高召回率的主要策略是什么? 更改数据集并添加更多肯定标签可能可以解决问题,但更改问题的现实情况似乎很奇怪...

在我看来,应该有一种方法支持“真阳性”而不是“假阴性”,但是我似乎找不到。

1 个答案:

答案 0 :(得分:2)

您应使用“ weighted cross entropy”而不是经典的CE。从Tensorflow文档中:

  

这类似于sigmoid_cross_entropy_with_logits(),不同之处在于pos_weight可通过相对于负误差增加或减小正误差的成本来权衡召回率和精度。   通常的交叉熵代价定义为:

targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))
  

值pos_weights> 1会减少假阴性计数,从而增加召回率。相反,将pos_weights设置为<1可减少误报计数并提高精度。从以下事实可以看出这一点:pos_weight作为损失表达式中正目标项的乘数系数引入:

targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))