这样做有什么陷阱,为什么这是一种不好的做法?模型是否有可能开始背诵图像而不是理解底层逻辑?
为什么在同一数据集上训练和测试模型是错误的?
是的,你说得很对。
作为一名老师,你不会给你的学生一个考试,其中的练习与你作为家庭作业提供的完全相同:你想知道他们是否 (a) 真正理解了你教给他们的方法背后的直觉,以及 (b)确保他们不只是记住了家庭作业。
这是错误的,因为:
- 它从根本上是不正确的(理论上的问题)
- 它会导致不好的结果(一个实际问题)
这从根本上说是不正确的,因为测试模型的目的通常是估计它对模型没有看到的数据的预测效果如何。
很难对真实世界的性能做出良好的估计,即使你做的一切都是正确的。如果您使用训练数据来估计性能,结果比无用还差,这是一种积极的误导。
有几种方法会导致不好的结果。
过拟合
如果您正在使用少量数据训练复杂模型,则您的模型很可能会过拟合。简而言之,我们可以说,如果它有很多“记忆”(参数),它会记住训练数据,并且无法理解其底层结构。
想象一下,您正在构建一个基于建筑面积预测房价的模型。您的训练集如下所示:
area price
30 100001
50 150002
80 200003
你训练你的模型,然后让它预测面积为 50 的房子的价格,它告诉你价格应该是 150002。这准确吗?并不真地。它只是记住训练数据。
过度拟合通常是通过训练集和测试集之间的巨大性能差异来检测的。如果您在训练集上进行测试,则无法检测到过度拟合。
概念漂移
如果您确保在大量数据上训练一个非常简单的模型,即使没有过度拟合,模型也会经常出现概念漂移。
这基本上意味着数据的底层结构会随着时间而改变。例如,在对周一至周五的数据进行培训后,试图预测一家商店在周末的销售额。
如果您的测试数据在时间维度上与训练集相比不够多样化,您将不会发现这个问题。
您训练的模型可能会学习“太多”或记住训练数据,然后它在看不见的数据上表现不佳。这称为“过拟合”。
在同一个数据集上训练和测试的问题是你不会意识到你的模型是过拟合的,因为你的模型在测试集上的表现很好。对训练期间未见过的数据进行测试的目的是让您正确评估是否发生过拟合。
简单的答案:循环推理。你的模型“知道”你已经告诉它答案的事情的答案这一事实并不能证明任何事情。
换句话说:测试的全部目的是了解您的模型对尚未看到的数据的处理效果如何,而使用它已经看到的数据对其进行测试并不能做到这一点。