《机器学习:算法视角(原书第2版)》 —2.2.2 训练集、测试集和验证集

举报
华章计算机 发表于 2019/12/21 13:00:37 2019/12/21
【摘要】 本节书摘来自华章计算机《机器学习:算法视角(原书第2版)》 一书中第2章,第2.2.2节,作者是[新西兰] 史蒂芬·马斯兰(Stephen Marsland),高 阳 商 琳 等译。

2.2.2 训练集、测试集和验证集

我们现在需要三组数据集:实际训练算法的训练集、用于跟踪其学习效果的验证集,以及用于产生最终结果的测试集。这在数据上变得越来越昂贵,特别是对于监督学习,必须附加目标值(甚至对于无监督学习,验证和测试集也需要目标,以便有比较的对象),并且并不总是容易获得准确的标记(这可能是你想要了解数据的原因)。半监督学习领域试图满足对大量标记数据的这种需求,有关参考资料请见本章中的拓展阅读小节。

显然,每个算法都需要一些合理的数据量来学习(精确需求变化,但算法训练到的数据越多,就越有可能看到每种可能输入类型的例子,尽管更多数据会增加学习的计算时间)。但是,相同的理论也用来证明验证和测试集合应该合理地增大。一般来说,训练集、测试集、验证集数据的确切比例取决于你自己,但如果有足够的数据,则通常会执行50∶25∶25这样的操作,否则执行60∶20∶20。数据如何进行划分也很重要。许多数据集的第一组数据在第1类,第二组在第2类,依此类推。如果你选择前几个点作为训练集,下面的作为测试集等,则结果将非常糟糕,因为训练没有看到所有类。这可以通过随机重新排序数据,或通过将每个数据随机分配给其中一个集来处理,如图2-6所示。

image.png

图2-6 数据集划分为不同的集合,一些用于训练,一些用于验证,一些用于测试

如果真的缺少训练数据,那么如果你有一个单独的验证集,就会担心算法没有受到足够的训练,则可以执行留出法(leave-some-out)、多折交叉验证(multi-fold cross-validation)等评估方法。这个思想如图2-7所示。数据集随机分为K个子集,一个子集用作验证集,而算法则在所有其他子集上进行训练。然后选出不同的子集并且在该子集上训练新模型,对所有不同子集重复相同的过程。最后,测试并使用产生最低验证误差的模型。我们已经平衡了数据和计算时间,因为必须训练K个不同的模型而不是一个。 在最极端的情况下,可采用留一法(leave-one-out)交叉验证,算法仅在一些数据上进行验证,对剩余所有数据进行训练。

image.png

图2-7 在训练许多模型时,留出法、多折交叉验证可以解决数据短缺的问题。它的工作原理是将数据分成几组,在大多数集合上训练模型,并保留一个用于验证(另一个用于测试)。 训练不同的模型时保持不同的组合

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。