泛化、过拟合与欠拟合

泛化、过拟合与欠拟合

在监督学习中,我们想要在训练数据上构建模型,然后能够对没见过的新数据(这些新数据与训练集具有相同的特性)做出准确预测。如果一个模型能够对没见过的数据做出准确预测,我们就说它能够从训练集 泛化(generalize)到测试集。我们想要构建一个泛化精度尽可能高的模型。

通常来说,我们构建模型,使其在训练集上能够做出准确预测。如果训练集和测试集足够相似,我们预计模型在测试集上也能做出准确预测。不过在某些情况下这一点并不成立。例如,如果我们可以构建非常复杂的模型,那么在训练集上的精度可以想多高就多高。为了说明这一点,我们来看一个虚构的例子。比如有一个新手数据科学家,已知之前船的买家记录和对买船不感兴趣的顾客记录,想要预测某个顾客是否会买船。目标是向可能购买的人发送促销电子邮件,而不去打扰那些不感兴趣的顾客。

假设我们有顾客记录,如表 2-1 所示。
在这里插入图片描述

在这里插入图片描述
对数据观察一段时间之后,我们的新手数据科学家发现了以下规律:“如果顾客年龄大于45 岁,并且子女少于 3 个或没有离婚,那么他就想要买船。”如果你问他这个规律的效果如何,我们的数科学家会回答:“100% 准确!”的确,对于表中的数据,这条规律完全正确。我们还可以发现好多规律,都可以完美解释这个数据集中的某人是否想要买船。数据中的年龄都没有重复,因此我们可以这样说:66、52、53 和 58 岁的人想要买船,而其他年龄的人都不想买。虽然我们可以编出许多条适用于这个数据集的规律,但要记住,我们感兴趣的并不是对这个数据集进行预测,我们已经知道这些顾客的答案。我们想知道新顾客是否可能会买船。因此,我们想要找到一条适用于新顾客的规律,而在训练集上实现100% 的精度对此并没有帮助。我们可能认为数据科学家发现的规律无法适用于新顾客。它看起来过于复杂,而且只有很少的数据支持。例如,规律里“或没有离婚”这一条对应的只有一名顾客。

判断一个算法在新数据上表现好坏的唯一度量,就是在测试集的评估。然而从直觉上看,我们认为简单的模型对新数据的泛化能力更好。如果规律是“年龄大于 50岁的人想要买船”,并且这可以解释所有顾客的行为,那么我们将更相信这条规律,而不是与年龄、子女和婚姻状况都有关系的那条规律。因此,我们总想找到最简单的模型。构建一个对现有信息量来说过于复杂的模型,正如我们的新手数据科学家做的那样,这被称为过拟合(overfitting)。如果你在拟合模型时过分关注训练集的细节,得到了一个在训练集上表现很好、但不能泛化到新数据上的模型,那么就存在过拟合。与之相反,如果你的模型过于简单——比如说,“有房子的人都买船”——那么你可能无法抓住数据的全部内容以及数据中的变化,你的模型甚至在训练集上的表现就很差。选择过于简单的模型被称为 欠拟合(underfitting)。我们的模型越复杂,在训练数据上的预测结果就越好。但是,如果我们的模型过于复杂,我们开始过多关注训练集中每个单独的数据点,模型就不能很好地泛化到新数据上。二者之间存在一个最佳位置,可以得到最好的泛化性能。这就是我们想要的模型。

图 2-1 给出了过拟合与欠拟合之间的权衡。
在这里插入图片描述

站在巨人的肩膀上
来源:《Python机器学习基础教程》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值