首页 > 解决方案 > 在倾斜数据集的训练中使用 Precision 和 Recall

问题描述

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

当我在所有数据上训练模型时,我得到了 99% 的总体准确率,但在负例上的准确率为 0%(即,将所有内容分类为正例)。

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

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

提前致谢

标签: pythonmachine-learningpytorchprecision-recall

解决方案


精度、召回率和 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 分数是否有任何改善。


推荐阅读