《机器学习:算法视角(原书第2版)》 —2.2.2 训练集、测试集和验证集
2.2.2 训练集、测试集和验证集
我们现在需要三组数据集:实际训练算法的训练集、用于跟踪其学习效果的验证集,以及用于产生最终结果的测试集。这在数据上变得越来越昂贵,特别是对于监督学习,必须附加目标值(甚至对于无监督学习,验证和测试集也需要目标,以便有比较的对象),并且并不总是容易获得准确的标记(这可能是你想要了解数据的原因)。半监督学习领域试图满足对大量标记数据的这种需求,有关参考资料请见本章中的拓展阅读小节。
显然,每个算法都需要一些合理的数据量来学习(精确需求变化,但算法训练到的数据越多,就越有可能看到每种可能输入类型的例子,尽管更多数据会增加学习的计算时间)。但是,相同的理论也用来证明验证和测试集合应该合理地增大。一般来说,训练集、测试集、验证集数据的确切比例取决于你自己,但如果有足够的数据,则通常会执行50∶25∶25这样的操作,否则执行60∶20∶20。数据如何进行划分也很重要。许多数据集的第一组数据在第1类,第二组在第2类,依此类推。如果你选择前几个点作为训练集,下面的作为测试集等,则结果将非常糟糕,因为训练没有看到所有类。这可以通过随机重新排序数据,或通过将每个数据随机分配给其中一个集来处理,如图2-6所示。
图2-6 数据集划分为不同的集合,一些用于训练,一些用于验证,一些用于测试
如果真的缺少训练数据,那么如果你有一个单独的验证集,就会担心算法没有受到足够的训练,则可以执行留出法(leave-some-out)、多折交叉验证(multi-fold cross-validation)等评估方法。这个思想如图2-7所示。数据集随机分为K个子集,一个子集用作验证集,而算法则在所有其他子集上进行训练。然后选出不同的子集并且在该子集上训练新模型,对所有不同子集重复相同的过程。最后,测试并使用产生最低验证误差的模型。我们已经平衡了数据和计算时间,因为必须训练K个不同的模型而不是一个。 在最极端的情况下,可采用留一法(leave-one-out)交叉验证,算法仅在一些数据上进行验证,对剩余所有数据进行训练。
图2-7 在训练许多模型时,留出法、多折交叉验证可以解决数据短缺的问题。它的工作原理是将数据分成几组,在大多数集合上训练模型,并保留一个用于验证(另一个用于测试)。 训练不同的模型时保持不同的组合
- 点赞
- 收藏
- 关注作者
评论(0)