如何检查训练集和测试集的分布是否相似

数据挖掘 机器学习 分类 数据集 分配
2021-10-02 08:50:26

我一直在玩 Kaggle 比赛,发现有训练集和测试集的分布不同的情况,所以我想知道如何检查训练集和测试集的分布是否相似。
我搜索它并找到一个博客,通过将其转换为二进制分类问题来检查分布的相似性。如果AUC 很高,那么训练集和测试集的分布肯定是不同的。他给出的想法如下:

如果存在协变量偏移,那么在混合训练和测试时,我们仍然能够以良好的准确度对每个数据点的来源(无论是来自测试还是训练)进行分类。

但是我还是不明白为什么他可以用这种方式检查这两个分布的相似性。
还有其他方法可以检查它的相似性吗?
如果有人可以帮助我,我们将不胜感激。

2个回答

看起来写博客的人正在将来自测试集和训练集的样本组合到一个数据帧中,然后预测每个样本是来自测试集还是训练集(他的 y 变量称为“is_train”,表示样本是否来自训练集)。我认为他的观点是,如果您能够准确地分类样本是来自测试集还是训练集,那么预测变量具有不同的潜在分布。这意味着您的原始模型可能无法很好地处理此测试数据。另外——他使用 AUROC 作为性能指标。高 AUROC 意味着模型表现良好,在这种情况下,这意味着训练集和测试集之间的预测变量分布存在很大差异。理想情况下,

我认为这种情况只有在您部署了模型并且您需要检查您的模型是否随着时间的推移仍然相关的情况下才相关。如果您正在构建一个新模型,则不需要这样做,因为测试数据是从数据集中随机抽样的。此外,如果您正在进行交叉验证,那么就更不用担心类似的事情了。

量化分布的(不)相似性的两个常见分数是Kullback-Leibler散度和Jensen-Shannon散度。