高召回率 - 不平衡数据集的低精度

机器算法验证 机器学习 分类 支持向量机 不平衡类 精确召回
2022-02-16 03:48:56

我目前在使用支持向量机分析推文数据集时遇到了一些问题。问题是我有一个不平衡的二元类训练集(5:2);预计与真实的班级分布成正比。在预测时,我得到验证集中少数类的低精度(0.47);召回率为 0.88。我尝试使用几种过采样和欠采样方法(在训练集上执行),但由于验证集不平衡以反映真实的类分布,因此并没有提高精度。我还在支持向量机中实现了不同的成本,这很有帮助。现在看来我不能再提高我的表现了。

你们中有人有什么建议可以在不影响召回率的情况下提高我的精确度吗?此外,有没有人知道为什么我得到的假阳性比假阴性多得多(阳性是少数类)?

3个回答

有没有人知道为什么我得到的假阳性比假阴性多得多(阳性是少数类)?在此先感谢您的帮助!

因为正面是少数类。有很多负面的例子可能会变成误报。相反,可能成为假阴性的正面例子较少。

回想一下,Recall = Sensitivity=TP(TP+FN)

敏感性(真阳性率)与假阳性率(1-特异性)相关,如 ROC 曲线所示。在一个极端情况下,您将每个示例都称为正面,并且在 100% FPR 下具有 100% 的灵敏度。在另一种情况下,您没有将示例称为正面,并且具有 0% 的敏感性和 0% 的 FPR。当正类为少数时,即使是相对较小的 FPR(可能是因为您有较高的召回率=敏感度=TPR)最终也会导致大量的 FP(因为有很多负例)。

自从

精度=TP(TP+FP)

即使在 FPR 相对较低的情况下,如果负例的数量大得多,FP 也会压倒 TP。

或者,

正分类器:C+

正例:O+

精度 =P(O+|C+)=P(C+|O+)P(O+)P(C+)

当正类较小时,P(O+) 较低。

你们中有人有什么建议可以在不影响召回率的情况下提高我的精确度吗?

正如@rinspy 所提到的,根据我的经验,GBC 运行良好。然而,它会比具有线性内核的 SVC 慢,但您可以制作非常浅的树来加速它。此外,更多特征或更多观察可能会有所帮助(例如,可能有一些当前未分析的特征在您当前的所有 FP 中始终设置为某个值)。

绘制 ROC 曲线和校准曲线可能也是值得的。可能的情况是,即使分类器的精度很低,它也可能导致非常有用的概率估计。例如,即使绝对概率很小,只要知道硬盘驱动器的故障概率可能会增加 500 倍,这可能是重要的信息。

此外,低精度本质上意味着分类器返回大量误报。但是,如果误报很便宜,这可能不会那么糟糕。

试用方法:

欠采样:

我建议使用欠采样技术,然后训练你的分类器。

不平衡学习为不平衡数据集提供了一个 scikit 学习风格的 api,应该是一个很好的采样和算法尝试的起点。

图书馆https ://imbalanced-learn.readthedocs.io/en/stable/

基于排名的支持向量机:

这已表明可以提高高精度系统的召回率,并被谷歌用于检测不良广告。我建议尝试一下。

支持向量机的参考论文:

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37195.pdf

标准方法是根据班级频率来衡量你的错误。例如,如果您在 Python 中使用 sklearn 执行此操作:

model = sklearn.svm.SVC(C=1.0, kernel='linear', class_weight='balanced')
model.fit(X, y)