Python 在倾斜数据集训练中使用精度和召回率

Python 在倾斜数据集训练中使用精度和召回率,python,machine-learning,pytorch,precision-recall,Python,Machine Learning,Pytorch,Precision Recall,我有一个扭曲的数据集(5000000个正示例和8000个负示例[二进制分类]),因此,我知道,准确性不是一个有用的模型评估指标。我知道如何从数学上计算精度和召回率,但我不确定如何在python代码中实现它们 当我针对所有数据对模型进行训练时,总的来说,我获得了99%的准确率,但对负面示例的准确率为0%(即,将所有内容分类为正面) 我已经在Pytorch中使用criteria=nn.CrossEntropyLoss()和optimizer=optim.Adam()构建了当前的模型 所以,我的问题是

我有一个扭曲的数据集(5000000个正示例和8000个负示例[二进制分类]),因此,我知道,准确性不是一个有用的模型评估指标。我知道如何从数学上计算精度和召回率,但我不确定如何在python代码中实现它们

当我针对所有数据对模型进行训练时,总的来说,我获得了99%的准确率,但对负面示例的准确率为0%(即,将所有内容分类为正面)

我已经在Pytorch中使用
criteria=nn.CrossEntropyLoss()
optimizer=optim.Adam()
构建了当前的模型

所以,我的问题是,我如何在训练中实现精确性和召回率,以产生尽可能最好的模型


提前感谢

精度、召回率和F1分数以及其他指标的实现通常是从python中的scikit学习库导入的

链接:

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

可以使用合成少数过采样技术(SMOT)生成负样本。这个链接是一个很好的起点。 链接:


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

为了补充另一个答案,一些分类器有一个名为
class_weight
的参数,让您修改损失函数。通过对少数类的错误预测进行更多惩罚,您可以训练分类器学习预测这两个类。 关于pytorch的具体答案,您可以参考

正如在另一个答案中提到的,可以使用过采样和欠采样策略。如果你在寻找更好的东西,看看