在不平衡数据集上使用 Precision Recall

数据挖掘 机器学习 r 分类
2021-09-27 12:12:52

我是数据科学的新手,正在研究一个大约有 213,000 行和 31 列的数据集。第 31 列是我的响应变量,其值为 0 和 1。这是一个分类问题,数据集是不平衡的,因为在我对其应用逻辑回归后,我得到了 99.79% 的模型准确度,但是,仅计算 0 和 1 的总数,它仍然显示出 99+% 的准确度因为它正确分类了最大数量的 0。

混淆矩阵也无济于事。

我做了一些挖掘并学会了在这种情况下使用精确召回。我的问题是我什至应该在这个数据集上使用逻辑回归吗?然后使用精确召回?

如果有人能阐明我应该采取什么方法,那真的会帮助我前进。

3个回答

在评估您的算法时,尤其是当您的数据集不平衡时,您应该使用更多的指标,而不仅仅是准确性。准确性是您总共正确识别了多少个示例。正如您所看到的,如果您有一个不平衡的数据集,其中 0.5% 的实例是 1,那么如果您盲目地将所有输出设置为零,这将导致 99.5% 的准确度。尽管精度很高,但这显然是错误的。精度计算为

Accuracy=TP+TNTP+TN+FP+FN

其中TP是真阳性,TN是真阴性,FP是假阳性,FN是假阴性。

如果您想捕获不平衡数据集的性能,您应该查看您正在计算的 FP 和 FN 的百分比。您可以使用敏感性和特异性来做到这一点。计算灵敏度为

Sensitivity=TPTP+FN

和特异性为

Specificity=TNTN+FP.

一个理想的分类器应该具有准确度、特异性和灵敏度都为 1。这意味着每个样本都被正确分类。在你得到非常高的假阴性的情况下,你会发现你的敏感度会非常低。这是一个衡量标准,您可以用它来说明您的算法表现不佳。在您正在进行的任何统计研究中始终包含这些指标是一种很好的形式。仅靠准确性不足以证明您获得了良好的结果。

此外,还有接受者-操作者曲线(ROC)。这将告诉您任何真阳性率的假阳性率。然后,您可以计算该曲线下的面积 (AUC) 以获得可比较的性能指标。

在评价算法的性能时,所有这些都应该一起使用。ROC 和 AUC 可以省略,但忽略算法的敏感性和特异性是不明智的。

如果您的数据集遵循一些清晰的多项式曲线,您可以使用逻辑回归,您可以通过绘制数据并查看其分布方式来验证这一点。在这种情况下,即使数据有偏差,您也可能会得到一个好的分类器。

通过始终预测其中一个值来实现更高的准确度(如您所提到的 99%)这一事实是分类器准确度不用于评估逻辑回归模型的原因。相反,Precision 和 Recall 可以让您更好地了解分类器的质量,因为它们测量了它分类为正面的示例中有多少实际上是正面的,以及它正确分类的训练集中有多少正面示例。

两个指标之间的权衡有助于您找到一个既精确又可以泛化的分类器。

找到了一个解决方案,对于一个不平衡的数据集,首先使用 SMOTE 然后应用任何模型来使用检查 AUC