训练您的模型并提高召回率/精度的最佳方法是啥?

Posted

技术标签:

【中文标题】训练您的模型并提高召回率/精度的最佳方法是啥?【英文标题】:What is the best way to train your model and favoring recall/precision?训练您的模型并提高召回率/精度的最佳方法是什么? 【发布时间】:2018-12-11 23:08:38 【问题描述】:

我有一个二元分类问题,我的数据集由 5% 的正标签组成。我正在使用 tensorflow 训练我的模型。这是我在训练期间的结果:

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】:

您应该使用“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

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

【讨论】:

这正是我想要的。我所有的指标(准确率、召回率和准确率)都上升了,这有点奇怪,因为我期待一些权衡。你知道是否有一个方法来计算“pos_weight”的最佳值吗?

以上是关于训练您的模型并提高召回率/精度的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中提高不平衡数据集的精度和召回率

衡量机器学习模型的三大指标:准确率精度和召回率。

计算精度和召回率

第一次预测的精度、F 分数和召回率高

牢记分类指标:准确率、精确率、召回率、F1 score以及ROC

多类模型的准确率、精度和召回率