在偏斜数据集的训练中使用 Precision 和 Recall
Using Precision and Recall in training of skewed dataset
我有一个偏斜的数据集(5,000,000 个正面示例和只有 8000 个负面 [二进制分类]),因此,我知道准确性不是有用的模型评估指标。我知道如何以数学方式计算精度和召回率,但我不确定如何在 python 代码中实现它们。
当我在所有数据上训练模型时,我获得了 99% 的总体准确率,但负面示例的准确率为 0%(即,将所有内容归类为正面)。
我已经使用 criterion = nn.CrossEntropyLoss()
和 optimiser = optim.Adam()
在 Pytorch 中构建了我当前的模型。
所以,我的问题是,如何在我的训练中实施精确度和召回率以生成可能的最佳模型?
提前致谢
precision、recall 和 F1 score 等指标的实现通常是从 python 中的 scikit-learn 库中导入的。
link: http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
关于您的 class化任务,正训练样本的数量远远超过负样本。尝试减少正样本数量或生成更多负样本进行训练。考虑到 class 偏度,我不确定深度神经网络能否为您提供最佳结果。
可以使用合成少数过采样技术 (SMOT) 技术生成负样本。 link 是一个很好的起点。
Link: https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/
首先尝试使用逻辑回归或随机森林等简单模型,并检查模型的 F1 分数是否有任何改进。
为了补充另一个答案,一些 class 化器有一个名为 class_weight
的参数,让您可以修改损失函数。通过更多地惩罚少数 class 的错误预测,您可以训练 classifier 学习预测两个 classes。
具体pytorch的答案,可以参考this link
正如另一个答案中提到的,可以使用过采样和欠采样策略。如果您正在寻找更好的东西,请查看 this paper
我有一个偏斜的数据集(5,000,000 个正面示例和只有 8000 个负面 [二进制分类]),因此,我知道准确性不是有用的模型评估指标。我知道如何以数学方式计算精度和召回率,但我不确定如何在 python 代码中实现它们。
当我在所有数据上训练模型时,我获得了 99% 的总体准确率,但负面示例的准确率为 0%(即,将所有内容归类为正面)。
我已经使用 criterion = nn.CrossEntropyLoss()
和 optimiser = optim.Adam()
在 Pytorch 中构建了我当前的模型。
所以,我的问题是,如何在我的训练中实施精确度和召回率以生成可能的最佳模型?
提前致谢
precision、recall 和 F1 score 等指标的实现通常是从 python 中的 scikit-learn 库中导入的。
link: http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
关于您的 class化任务,正训练样本的数量远远超过负样本。尝试减少正样本数量或生成更多负样本进行训练。考虑到 class 偏度,我不确定深度神经网络能否为您提供最佳结果。
可以使用合成少数过采样技术 (SMOT) 技术生成负样本。 link 是一个很好的起点。 Link: https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/
首先尝试使用逻辑回归或随机森林等简单模型,并检查模型的 F1 分数是否有任何改进。
为了补充另一个答案,一些 class 化器有一个名为 class_weight
的参数,让您可以修改损失函数。通过更多地惩罚少数 class 的错误预测,您可以训练 classifier 学习预测两个 classes。
具体pytorch的答案,可以参考this link
正如另一个答案中提到的,可以使用过采样和欠采样策略。如果您正在寻找更好的东西,请查看 this paper