Chapter 40、Generalizing from the training set to the dev set

从训练集到开发集的泛化

假设你在训练和测试集分布不同的情况下应用ML。假设,训练集包含互联网图片和移动图片,并且开发/测试集仅包含移动图片。然而,算法工作的并不好:在开发/测试集上的错误比你想象的高很多。以下是可能出错的一些可能性:

  1. 它在训练集上做的不好。这是训练集分布上的高(可避免)偏差问题。
  2. 它在训练集上做的很好,但是并没有很好的泛化到之前和训练集来自相同分布的没有被看到的数据上。这是高方差。
  3. 它很好的泛化到和训练集来自相同分布的新数据上,但没能很好的泛化开发/测试集分布的数据。我们称该问题为数据不匹配,因为训练数据和开发/测试集数据不匹配。

例如,假设在猫识别任务上人可以达到几乎完美的表现。你的算法达到如下成绩:

  • 在训练集上1%的错误率
  • 在算法没有看见的和训练集来自相同分布的数据上1.5%的错误率
  • 在开发集上10%的错误率

在这种情况下,你显然存在数据不匹配问题。为了解决该问题,你可能需尝试获取和开发/测试集更类似的训练数据。我们稍后将讨论一些方法。

为了诊断算法在上述1-3问题上遭受何种程度的影响,有另一个数据集事有用的。具体来说,与其给算法所有可用的训练数据,不如将其分成两个子集:算法用于训练的实际训练集,和一个独立的数据集,我们称之为“训练开发”集,不用于训练。

现在你有四个数据子集:

  • 训练集:这是算法将从中学习的数据(例如互联网图片和移动图片)。这不必从我们真正关心数据的相同分布(开发/测试集分布)中获取。
  • 训练开发集:该数据和训练集来自相同的分布(即互联网图片和移动图片)。通常比训练集要小,它只需要足够大以评估和跟踪学习算法的进度就行。
  • 开发集:和测试集来自相同的分布,它反映我们最终关心并想要做好的数据的分布(即移动图片)。
  • 测试集:和开发集来自相同的分布(例如移动图片)。

有以上四个独立的数据集,现在你可以评估:

  • 训练错误,通过对训练集进行评估。
  • 算法泛化到和训练数据来自相同分布的新数据的能力,通过对训练开发集进行评估。
  • 算法在你关心的任务上的表现,通过对开发、测试集进行评估。

大部分在第5~7章选择开发集大小的指导方针同样适用于训练开发集。

results matching ""

    No results matching ""