python - 在倾斜数据集的训练中使用 Precision 和 Recall
问题描述
我有一个倾斜的数据集(5,000,000 个正例,只有 8000 个负例 [二进制分类]),因此,我知道,准确性不是一个有用的模型评估指标。我知道如何计算精度和数学召回,但我不确定如何在 python 代码中实现它们。
当我在所有数据上训练模型时,我得到了 99% 的总体准确率,但在负例上的准确率为 0%(即,将所有内容分类为正例)。
我已经在 Pytorch 中使用criterion = nn.CrossEntropyLoss()
and构建了我当前的模型optimiser = optim.Adam()
。
所以,我的问题是,我如何在训练中实现精确度和召回率,以产生最好的模型?
提前致谢
解决方案
精度、召回率和 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 分数是否有任何改善。
推荐阅读
- c++ - 如何将 cpplint.py 检查添加到 CMake 中?
- python - 如何从外部访问连接到路由器的 Kafka Multicluster?
- c# - 如何在从基类需要注入服务的基类继承的类中编写类构造函数?
- javascript - 带有负密钥的 JavaScript 中的凯撒密码
- javascript - Node + Express,JWT auth 问题——我没看清楚
- python - 如何查找局域网中的主机列表?
- android - 带有图像的 Android Studio 抽认卡
- julia - 如何在 Julia 的条件内传递参数?
- angular - ANGULAR 7 - 在“{}”类型上找不到带有“字符串”类型参数的索引签名
- php - 在显示产品名称的 WooCommerce 管理订单列表中添加新列时出现问题