1. 训练集用于训练模型。理论上训练集越大越好。
    1. 大多数机器学习算法具有超参数,超参数的值无法通过学习算法拟合出来(比如正则化项的系数、控制模型容量的参数 )。
    2. 为了解决这个问题,可以引入验证集。将训练数据分成两个不相交的子集:训练集用于学习模型,验证集用于更新超参数。
    3. 通常要求验证集足够大。如果验证集很小,那么模型的超参数可能就记住了一个小验证集里的样本,模型将对验证集严重过拟合。
    4. 验证集通常会低估泛化误差。因此当超参数优化完成后,需要通过测试集来估计泛化误差。
    1. 测试集中的样本一定不能是训练样本。如果将训练样本放入测试集中,则会低估泛化误差。

    2. 测试集 vs 验证集:

      • 测试集通常用于对模型的预测能力进行评估,它提供了模型预测能力的无偏估计。

        如果你不需要对模型预测能力的无偏估计,则不需要测试集。

    1. 对于小批量数据,数据的拆分的常见比例为:

      • 如果未设置验证集,则将数据三七分:70% 的数据用作训练集、30% 的数据用作测试集。
      • 如果设置验证集,则将数据划分为:60% 的数据用作训练集、20%的数据用过验证集、20% 的数据用作测试集。
    2. 对于大批量数据,验证集和测试集占总数据的比例会更小。

      • 验证集的目的就是验证不同的超参数;测试集的目的就是比较不同的模型。

        • 一方面它们要足够大,才足够评估超参数、模型。
        • 另一方面,如果它们太大,则会浪费数据(验证集和训练集的数据无法用于训练)。
    3. 在 折交叉验证中:先将所有数据拆分成 k 份,然后其中1 份作为测试集,其他k-1 份作为训练集。

      • 这里并没有验证集来做超参数的选择。所有测试集的测试误差的均值作为模型的预测能力的一个估计。

      • 使用 折交叉的原因是:样本集太小。如果选择一部分数据来训练,则有两个问题:

        • 训练数据的分布可能与真实的分布有偏离。k 折交叉让所有的数据参与训练,会使得这种偏离得到一定程度的修正。
        • 训练数据太少,容易陷入过拟合。k 折交叉让所有数据参与训练,会一定程度上缓解过拟合。
    1. 深度学习时代,经常会发生:训练集和验证集、测试集的数据分布不同。

      如:训练集的数据可能是从网上下载的高清图片,测试集的数据可能是用户上传的、低像素的手机照片。

      • 训练数据可以与真实应用场景中的数据分布不一致,因为最终关心的是在模型真实应用场景中的表现。
    2. 如果发生了数据不匹配问题,则可以想办法让训练集的分布更接近验证集。

      • 一种做法是:收集更多的、分布接近验证集的数据作为训练集合。

      • 该策略有一个潜在问题:你可能只是模拟了全部数据空间中的一小部分。导致你的模型对这一小部分过拟合。

    3. 当训练集和验证集、测试集的数据分布不同时,有以下经验原则:

      • 确保验证集和测试集的数据来自同一分布。

        因为需要使用验证集来优化超参数,而优化的最终目标是希望模型在测试集上表现更好。

      • 确保验证集和测试集能够反映未来得到的数据,或者最关注的数据。

      • 确保数据被随机分配到验证集和测试集上。

    4. 当训练集和验证集、测试集的数据分布不同时,分析偏差和方差的方式有所不同。

      • 如果训练集和验证集的分布一致,那么当训练误差和验证误差相差较大时,我们认为存在很大的方差问题。

        • 第一个原因:模型只见过训练集数据,没有见过验证集的数据导致的,是数据不匹配的问题。
        • 第二个原因:模型本来就存在较大的方差。

        为了弄清楚原因,需要将训练集再随机划分为:训练-训练集、。这时候,训练-训练集训练-验证集 是同一分布的。

        • 模型在训练-训练集 和 上的误差的差距代表了模型的方差。