训练和测试数据分布之间的差异

机器算法验证 机器学习 假设检验 分布 分类
2022-03-27 07:29:50

机器学习的基本假设是训练和测试数据遵循相同的分布。但实际上这极不可能。协变量偏移解决了训练和测试分布不同的问题。有人可以对此提出以下疑问吗?

  1. 如何检查两个分布在统计上是否不同?
  2. 可以使用核密度估计 (KDE) 方法来估计概率分布以区分差异吗?
  3. 假设我有 100 张特定类别的图像。测试图像的数量为 50。我将训练图像的数量以 5 为步长从 5 个更改为 50 个。我可以说使用 5 个训练图像和 50 个测试图像在通过 KDE 估计它们后的概率分布不同吗?
2个回答

通常,您将获得训练数据作为总数据集的简单随机样本这使您可以利用随机样本的所有已知属性,包括训练和测试数据具有相同的基础分布这一事实。实际上,这种拆分的主要目的是使用一组数据来“训练”您的模型(即拟合模型),并使用另一组数据来设置对该模型感兴趣的假设。如果您不随机抽样您的训练数据,那么您会遇到各种问题,因为您的数据的两个部分之间可能存在系统差异。

我认为您将从中提取训练和测试分布的基础分布与特定训练和测试绘制的分布混淆了。

除非底层分布是时间敏感的,在抽取训练样本和测试样本之间的时间期间发生变化,否则底层分布每次都是相同的。

学习机器学习模型的目标通常不是学习训练分布,而是学习潜在的底层分布,其中训练分布只是一个样本。当然,您实际上看不到底层分布,但例如,如果您只关心学习训练样本,您可以简单地将训练样本记住在查找表中,故事结束。实际上,您正在使用训练样本作为底层分布的代理。“泛化”在某种程度上是“尝试学习底层分布,而不仅仅是过度拟合训练样本”的同义词。

要估计训练数据和拟合模型与基础分布的匹配程度,一种方法是绘制一个训练集和一个测试集。在训练集上训练,在测试集上测试。实际上,由于您很可能要拟合一堆超参数,因此您会在测试集上过度拟合这些超参数,并认为您获得了超棒的超高准确度,然后当您将模型投入生产时会严重失败。

更好的方法是使用交叉折叠验证:

  • 画一堆训练数据
  • 将其随机分成 80% 的训练数据和 20% 的验证/开发数据
    • 对此进行训练/测试,记下准确性等
  • 重做分裂,例如使用不同的随机种子
    • 重新运行训练/评估
  • 重做 5、10、20 次,具体取决于您看到的差异程度
  • 这将使您对您的训练集和模型与基础分布的拟合程度有相当现实的了解
  • 这很一般。您可以将此方法用于任何 iid 数据集