使用Precision和Recall训练偏斜数据集

时间:2018-07-19 14:36:57

标签: python machine-learning pytorch precision-recall

我有一个偏斜的数据集(5,000,000个阳性示例,而只有8000个阴性[二进制分类]),因此,我知道准确性不是有用的模型评估指标。我知道如何计算精度并进行数学上的调用,但是我不确定如何在python代码中实现它们。

当我在所有数据上训练模型时,总体上我获得了99%的准确度,而在负面示例上(即将所有内容归类为正面),则准确度为0%。

我已经用criterion = nn.CrossEntropyLoss()optimiser = optim.Adam()在Pytorch中建立了当前模型。

所以,我的问题是,如何在训练中实现精度和召回率,以产生最佳模型?

预先感谢

2 个答案:

答案 0 :(得分:1)

精度,召回率和F1得分以及其他指标的实现通常是从python的scikit-learn库中导入的。

链接:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics

关于分类任务,正面训练样本的数量只会使负面样本超越。尝试训练数量减少的阳性样本或生成更多的阴性样本。考虑到类的偏度,我不确定深度神经网络能否为您提供最佳的结果。

可以使用综合少数族裔过采样技术(SMOT)技术生成负样本。此链接是一个很好的起点。 链接:https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/

首先尝试使用逻辑回归或随机森林等简单模型,并检查模型的F1分数是否有改善。

答案 1 :(得分:1)

要添加到其他答案中,某些分类器具有名为class_weight的参数,可让您修改损失函数。通过对少数派的错误预测进行更多的惩罚,您可以训练您的分类器以学习预测两个分类。 有关pytorch的特定答案,您可以参考this link

如另一个答案中所述,可以使用过采样和欠采样策略。如果您正在寻找更好的东西,请查看this paper