如何提高测试集中负标签增加时的精确度-召回率得分

考虑以下场景:我有一批数据,其特征和标签的分布相似。

假设有4000000个负标签和25000个正标签

由于这是一个高度不平衡的数据集,我对负标签进行了欠采样,使得我的训练集(取自其中一批数据)现在包含25000个正标签和500000个负标签。

现在我在训练后尝试从测试集中(来自另一批数据)测量精确度和召回率。我使用了XGBoost,设定了30个估计器。

如果我使用所有40000000个负标签,我得到的精确度-召回率得分(在0.7阈值下为0.1精确度和0.1召回率)比使用一小部分例如500000个负标签时(在0.3阈值下为0.4精确度和0.1召回率)更差。

这可能发生的原因是什么?

我有几个想法:

  1. 这500000个负标签的特征与整体40000000个负标签中的其他标签大不相同。但当我绘制各个特征时,它们的中心趋势与子集非常接近。

当负标签数量增加时,还有其他方法可以识别为什么我的精确度-召回率会更低更差吗?

有什么方法可以比较这些分布吗?

我的欠采样训练是否是导致这种情况的原因?


回答:

为了理解这一点,我们首先需要了解精确度和召回率是如何计算的。为此,我将使用以下变量:

P – 总正样本数

N – 总负样本数

TP – 真阳性样本数

TN – 真阴性样本数

FP – 假阳性样本数

FN – 假阴性样本数

重要的是要注意:

P = TP + FN

N = TN + FP

现在,精确度是 TP/(TP + FP)

召回率是 TP/(TP + FN),因此是 TP/P。

准确率是 TP/(TP + FN) + TN/(TN + FP),即 (TP + TN)/(P + N)

在你的情况下,数据是不平衡的,我们知道 N>>P。

现在想象一个随机模型。我们通常可以说,对于这样的模型,准确率大约为50%,但这只是在数据平衡的情况下。在你的情况下,将会有更多的FP和TN,而不是TP和FN,因为随机选择数据更有可能返回一个负样本。

因此,我们可以确定负样本的百分比 N/(T+N) 越高,我们得到的FP和TN就越多。也就是说,每当你的模型无法选择正确的标签时,它会从P和N中随机选择一个标签,而大多数情况下会选择N。

回顾一下,FP是精确度中的分母?这意味着随着N/(T+N)的增加,精确度也会下降。

对于召回率,其推导中既没有FP也没有TN,因此随着N/(T+N)的增加不太可能发生太大变化。正如你在例子中看到的,它显然保持不变。

因此,我建议尝试使数据平衡以获得更好的结果。1:1.5的比例应该可以。你也可以使用不同的指标,比如结合精确度和召回率的F1分数,以更好地理解性能表现。

还可以查看这里关于如何处理不平衡数据的其他建议

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注