如何处理测试集和训练集分布的差异?

机器算法验证 机器学习 分类 偏度 不平衡类 多级
2022-01-18 17:40:39

我认为机器学习或参数估计的一个基本假设是看不见的数据来自与训练集相同的分布。但是,在某些实际情况下,测试集的分布几乎与训练集不同。

假设一个大规模的多分类问题,它试图将产品描述分类为大约 17,000 个类别。训练集将具有高度倾斜的类先验,因此某些类可能有很多训练示例,但有些可能只有少数。假设我们从客户端获得了一个带有未知类标签的测试集。我们尝试使用在训练集上训练的分类器将测试集中的每个产品分类到 17,000 个类别中的一个。测试集可能有倾斜的类分布,但可能与训练集有很大不同,因为它们可能与不同的业务领域相关。如果两个类分布非常不同,则经过训练的分类器可能无法在测试集中正常工作。对于朴素贝叶斯分类器,这一点似乎尤为明显。

是否有任何原则性的方法来处理概率分类器的训练集和特定给定测试集之间的差异?我听说“transductive SVM”在 SVM 中做了类似的事情。是否有类似的技术可以学习在特定给定测试集上表现最佳的分类器?然后我们可以为不同的给定测试集重新训练分类器,这在这个实际场景中是允许的。

2个回答

如果差异仅在于训练和测试集中的相对类频率,那么我会推荐本文介绍的 EM 程序:

Marco Saerens、Patrice Latinne、Christine Decaestecker:将分类器的输出调整为新的先验概率:一个简单的程序。神经计算 14(1): 21-41 (2002) ( www )

我自己使用过它,发现它工作得很好(你需要一个输出类成员概率的分类器)。

如果每个类内的模式分布发生变化,则该问题被称为“协变量偏移”,并且有Sugiyama 和 Kawanabe的优秀书籍。该小组的许多论文都可以在线获得,但如果您能获得一份副本,我强烈建议您也阅读这本书。基本思想是根据训练集和测试集之间的密度差异(不需要标签)对训练数据进行加权。获得权重的一种简单方法是使用逻辑回归来预测模式是来自训练集还是测试集。困难的部分是选择应用多少权重。

另请参阅 Alex Smola 的精彩博

我找到了一个关于域适应的优秀教程,可能有助于更详细地解释这一点: http ://sifaka.cs.uiuc.edu/jiang4/domain_adaptation/survey/da_survey.html 这里没有提到的一个解决方案是基于在 ADABOOST 上。以下是原文章的链接:http: //ftp.cse.ust.hk/~qyang/Docs/2007/tradaboost.pdf 基本思想是利用一些新的测试数据从训练数据中更新学习.这篇文章是关于迁移学习的冰山一角——你从一项任务中获取你所知道的并将其应用到另一项任务中。