2.2 什么是一个好的模型
我们先来看下面这张图。这张图统计了某公司过去几年的利润情况。图上有6个点,每个点都分别对应一年的利润(见图2-2)。
图2-2 某公司过去几年的利润
我们能够看到这家公司的利润变化趋势:前4年保持稳定,后2年开始有所增长。
现在,如果我们想要根据这6个点预测这家公司未来两年的利润,应该怎么办呢?你需要根据现有的这6个点画出一条曲线,然后再把这条曲线按照过去的趋势延伸到后几年。有一个专业的词汇用于形容找到这条曲线的过程,叫作“曲线拟合”。
曲线拟合通常分为两步:首先确定曲线的基本形式,然后找到该形式下的最优参数。我们通常可以自己选择曲线的形式,而最常用的莫过于多项式形式。对于上面这个例子,如果我们假设有时间t,而利润y是时间t的函数,那么一阶多项式的形式为:
y=a+bt (2.1)
即假设利润和时间的一次方有关,这里a,b都是待定的系数。不难看出,一阶多项式就是一条直线,而参数a,b,则决定了直线的斜率和截距。
确定了这个形式后,我们就需要找到最优的系数。这些系数应该要让已有数据点和这条曲线尽可能接近。我们在这里不详细介绍这个方法,但是该方法的核心,就是我们在上一节中提到的高斯发明的最小二乘估计。
机器学习领域的科学家把这条曲线对已有数据点的接近能力称为曲线对数据的解释能力。一条曲线和已有数据点越接近,这条曲线对这些点的解释能力就越强。
在给定一阶多项式形式的前提下,我们可以找到一组最优的a,b,而这一组a,b对应的一阶多项式的解释能力最强。
图2-3显示了我们用最小二乘估计得到的最优系数所对应的直线。
我们可以看出,虽然这条直线大致反映了利润变化趋势,但是这些已有数据点并没有都和这条直线重叠,有些点与直线的差距还比较大。这条直线“解释”已有数据点的能力并不算太强。
图2-3 用一阶多项式拟合的情况
我们来看看如果我们选择二阶多项式来拟合这些点会发生什么。在这个例子中,二阶多项式反映的利润不仅和时间有关,也和时间的平方有关:
y=a+bt+ct2 (2.2)
同样,我们可以用最小二乘法,确定一组最优的系数a,b,c,让这个二阶多项式对应的曲线和已有数据点最接近(见图2-4)。
我们通过观察可以发现,已有数据点都比较接近这条曲线。而且很有意思的是,这条曲线还反映了企业最近几年加速增长的趋势。
和之前的那条直线相比,总体上图2-4中的这条曲线更好地反映了已有数据点。
图2-4 用二阶多项式拟合的情况
也就是说,对于已有数据点,二阶多项式对应的曲线比一阶多项式对应的直线解释能力更强。这很容易理解,因为阶数越高,待定的参数越多,线的灵活性越强,越可以更好地接近已有数据点。
如果再仔细看一下图2-4,你会发现仍然有一些点不在这条曲线上。要想让这6个点都在这条曲线上,我们需要五阶多项式(见图2-5)。
图2-5上的这条曲线经过了每一个已有数据点,这是之前的直线和曲线都做不到的。也就是说,这条曲线的解释能力比之前两条线更强,它达到了一个极致,能够完美地解释所有已有数据点。从解释能力上来看,五阶多项式肯定是最好的,但它一定是最好的模型吗?
肯定不是。
图2-5 用五阶多项式拟合的情况
这个模型的意义在于预测这个公司之后几年的利润。如果用这个五阶多项式进行计算,我们可以发现,这个公司之后几年的利润会急剧下降,这显然预测得不够合理。
为什么会出现这一现象?机器学习中的“过度拟合”一词可以解释。过度拟合,是指这个模型可以很好地解释已有的数据,但是对没见过的数据预测得很差。
为什么会出现这一现象?这是因为所有已有数据点都会受各种小的噪声影响。一条曲线如果精准地拟合了这些数据,实际上也拟合了这些噪声。拟合噪声会让这条曲线无法抓住底层真实的数据趋势。
我们很容易发现,想使一条曲线具有好的解释能力其实很容易:在使用最小二乘估计的前提下,提高曲线的对应多项式方程的阶数。阶数越高,解释能力就越强。高阶的曲线具有更强的灵活性,可以更好地接近已有数据点。
但是,想使一条曲线具有好的预测能力则不是一件简单的事。我们需要控制多项式方程的阶数,不能过高,否则会拟合噪声;也不能过低,否则对应曲线和已有数据点的差距会过大。
无论如何,一个模型对未知数据的预测能力是判断其好坏的唯一标准。
计算机科学家们想了各种办法来判断何时会出现过度拟合,以及怎么避免过度拟合。例如,在选择模型时,刻意控制模型的复杂度,在上文例子中表现为控制多项式方程的阶数。此外,人们永远会把用来训练模型的数据(训练数据)和测试模型好坏的数据(测试数据)分开。也就是说,用来测试模型好坏的数据,永远是该模型未处理过的数据。这些数据对于该模型而言就是“预测数据的真实值”。
总结一下,在机器学习里,一个模型对未知数据的预测能力是判断其好坏的唯一标准。我们很容易通过一些方法(例如最小二乘估计)找到一个完美解释已有数据的模型。但是要找到一个能够很好地预测新数据的模型,则困难得多。