泛化,过拟合和欠拟合

假设我们有如下数据:

年龄 拥有的汽车数量 是否有房子 子女数量 婚姻状况 是否养狗 是否买过船
0 66 1 2 丧偶
1 52 2 3 已婚
2 22 0 0 已婚
3 25 1 1 单身
4 44 0 2 离异
5 39 1 2 已婚
6 26 1 2 单身
7 40 3 1 已婚
8 53 2 2 离异
9 64 2 3 离异
10 58 2 2 已婚
11 33 1 1 单身

我们的目的是根据上面船只的购买记录以及对买船不感兴趣的顾客记录,来预测某个记录是否买船。

对数据观察一段时间后,我们可以发现如下规律:“如果果顾客年龄大于
45 岁,并且子女少于 3 个或没有离婚,那么他就想要买船。” 对于表中的数据,该规律完全正确。但我们的目的并不是对这个数据集进行预测,而是想知道新顾客是否可能会买船,因次在训练集上实现 100% 的精度对此完全没有帮助。

判断一个算法在新数据上表现好坏的唯一度量,就是在测试集上的评估。构建一个对于现信息量过于复杂的模型,就像上面所述的规律一样,被称为过拟合(overfitting)。过拟合的模型过分关注训练集的细节,在训练集上表现很好但并不能很好地解释新数据。如果一个模型能够对没见过的数据做出准确预测,我们就说它能够从训练集泛化(generalize)到测试集。

与上述相反,如果我们的模型过于简单(“有房子的人都买船”),模型无法提取出数据中的大部分信息以致在训练集上的表现就很差,这就被称为欠拟合(underfitting)。

模型的复杂度越高,在训练集上的预测结果越好。但是如果模型过于复杂则泛化能力会变得越来越差。总之,我们的目的是在过拟合和欠拟合中找到一个平衡点,来使模型的泛化性能达到最好,这是我们理想的模型。