如果数据集规模非常大,这是好事。如果我们有十亿样本,可以使用其中的10%\~15%进行测试,置信区间(confidenceintervals)依然会很窄。如果数据集规模很小,我们可能需要执行诸如交叉验证之类较为复杂的操作。一个典型的错误是,测试集中的数据也在训练集中,即对测试数据进行训练。这会让你发现测试数据的准确率达到100%。这时,请反复检查自己有没有意外地对测试数据进行了训练。一个原因可能是整个数据集中有重复的数据,这些重复的数据分别分到了测试集和训练集。这样就是在一些测试数据上训练,当使用测试集测试模型时,就无法正确评估模型了。
8.3.2 验证集
8.3.1节阐述了测试集和训练集的用法。我们用训练数据训练一种模型,然后使用测试数据对模型进行测试并观察其指标。如图8-34所示,如果把训练和测试做成迭代,每次迭代调整一些设置,比如步长(或学习速率),然后重新尝试前面的操作(训练和测试),看看能否提高测试集的准确率。我们可能会添加一些特征,也可能会去除一些特征,并继续迭代,直到根据测试集指标找出最佳模型为止。这样有问题吗?有的,那就是针对测试数据的特性进行了过拟合。
如图8-35所示,我们可以使用另一种方法来解决这个问题:除了训练集和测试集外,分出一些数据来创建第三个数据集,即验证集。
如图8-36所示,我们使用一种增幅小的新迭代方法对训练数据进行迭代训练,然后仅基于验证数据进行评估。始终将测试数据搁置一旁,完全不使用测试数据。我们将不断迭代、调整各种参数或对模型进行任何更改,直到根据验证数据得出比较理想的结果。只有这时,我们才会拿测试数据测试模型。我们要确保测试数据集得出的结果符合验证数据集得出的结果。如果不符合,那么我们可能对验证集进行了过拟合。
第8章 TensorFlow
239