《机器学习:算法视角(原书第2版)》 —2.2 知你所知:测试机器学习算法
2.2 知你所知:测试机器学习算法
学习的目的是更好地预测输出,无论是类标记还是连续回归值。了解算法学习成功程度的唯一真正的方法是将预测与已知目标标记进行比较,这就是监督学习进行训练的方式。这表明你可以做的一件事就是查看算法在训练集上产生的错误。
但是,我们希望将算法推广到训练集中没有看到的示例,我们显然无法使用训练集来测试它。因此,我们需要一些不同的数据——测试集,以便对其进行测试。我们使用(输入,目标)对的测试集,将它们输送到网络中并将预测输出与目标进行比较,但不修改它们的权重或其他参数:我们用它们来决定算法学习的程度。唯一的问题是它减少了可用于训练的数据量,但这是我们必须忍受的。
2.2.1 过拟合
不幸的是,事情比这更复杂,因为我们可能还想知道算法在学习时的泛化情况:我们需要确保做了足够的训练,以及算法能很好地泛化。事实上,过度训练的危险性至少与训练不足一样高。大多数机器学习算法中可变度的数量是巨大的,对于神经网络,有很多权重,并且每个权重都可以变化。这无疑比我们学习的功能有更多的变化,所以需要小心:如果训练时间过长,那么我们将过拟合数据,这意味着我们同时学习了数据中的噪声和不准确性。因此,我们学到的模型会过于复杂,无法泛化。
图2-5 过拟合的效果,不是找到生成函数(如左图所示),而是神经网络完美匹配输入,包括噪声(右图)。这降低了网络的泛化能力图2-5通过绘制学习过程中两个不同点的某些算法的预测(作为曲线)来说明这一点。在图的左侧,曲线很好地拟合了数据的整体趋势(已经推广到一般函数),但是训练误差仍然不会接近于零,因为这条曲线只是接近但不是恰好压在所有训练数据上。随着网络的不断学习,最终会产生一个更复杂的模型,它具有较低的训练误差(接近于零),这意味着它已经记住了训练样例,包括其中的任何噪声成分,因此它已经过拟合了训练数据。
我们希望在算法过拟合之前停止学习过程,这意味着需要知道它在每个时间步长的泛化程度。我们不能使用训练数据,因为它不会检测过拟合,同时,我们也不能使用测试数据,因为我们将其保存为最终测试。因此,我们需要第三组数据用于此目的,这称为验证集(validation set),因为我们目前正在使用它来验证学习。这称为统计中的交叉验证(cross-validation)。它是模型选择(model selection)的一部分:为模型选择正确的参数,以便尽可能地泛化。
- 点赞
- 收藏
- 关注作者
评论(0)