从一个回归问题开始:给定一个real-valued input variable \(x\),通过这个observation预测a real-valued target variable \(t\) 。
本节将讨论一个简单的曲线拟合例子,这个例子将贯穿整章用于梳理一些重要的机器学习概念。
training set:
\(N\)个obeservations: \(\mathbf{x}\equiv(x_1,\ldots,x_N)^T\)
target values: \( \mathbf{t}\equiv(t_1\ldots,t_N)^T\)
training set由函数 \(sin(2\pi x)\)生成,同时为每个\(t_i\)加入高斯分布的noise,加入noise可以更贴近真实的数据,这样实验数据既有潜在的规律,同时也保留了真实数据中的一些随机噪声。下图显示了10个样本数据, \(\mathbf{x}\) 的取值空间为[0,1] :
我们的目标就是:给定一个新的input variable \(\widehat{x}\),我们能够预测出对应的target value \(\widehat{t}\). 因此我们需要从training set中找出隐含的函数 \(sin(2\pi x)\) ,但这是很难实现的:
1. 样本数小
2. 样本目标值存在noise
后面我们会使用概率从 \(\widehat{t}\) 不确定的角度以及决策论的方法处理该问题,这里我们选择一个简单的方式,polynomial function 多项式函数:
\[ y(x,\mathbf{w})=w_0+w_1x+w_2x^2+\ldots+w_Mx^M=\sum_{j=0}^{M}w_jx^j \]
\(M\) : 多项数的次数
\(\mathbf{w}\) : 参数\(w_0,\ldots,w_M\) 的向量形式
多项式函数 \(y(x,\mathbf{w})\) 对于 \(x\) 不是线性的,但是对于系数 \(\mathbf{w}\) 是线性的,类似于多项式函数这种对于未知参数是线性的函数,被称为linear function 线性模型。
我们需要通过多项式拟合training data 确定系数的值,这可以通过最小化error function 错误函数的方法达到我们的目标。错误函数用于衡量预测值与真实值之间的误差,一个广泛使用的错误函数是预测值与真实值误差平方和 :
\[ E(\mathbf{w})=\frac{1}{2}\sum_{n=1}^{N}\{y(x_n,\mathbf{w})-t_n\}^2 \]
整个函数和因子1/2 在贝叶斯理论中有对应的含义,后面讨论。当且仅当 \(y(x,\mathbf{w}\) 与training data完全拟合及函数曲线通过所有样本点时该错误函数值为 0 。
曲线拟合的问题就转换为找到合适系数 \(\mathbf{w}\) 使得损失函数 \( E(\mathbf{w})\) 尽量小,注意到该损失函数是 \(\mathbf{w}\) 的二次型,所以必存在\( \mathbf{w}^*\) 使得损失函数值最小。
另外一个问题就是如何选择多项式的order次数\(M\) :model comparison/model selection问题。下图是不同\(M\) 值的曲线拟合:
M=0,1: under-fitting 欠拟合
M=3 恰当
M=9 时,过拟合
如何来衡量过拟合?Root-mean-square(RMS)error 均方根误差:
\[ E_{RMS}\, =\, \sqrt{2E(\mathbf{w}^*)/N}\]
除数N可以让我们比较在不同大小test sets上的\(E_{RMS}\)。这样我们就可以用\(E_{RMS}\)衡量不同\(M\)的在test set上的表现:
随着\(M\) 增大,\(E_{RMS}\)在training set和test set上值逐渐减小,当\(M=9 \)时,\(E_{RMS}OfTraining=0 \),说明完全拟合,但此时Test set上的值就变的很大了,说明过拟合了。
按道理来说,次数大的多项式包含了次数小的多项式,这样\(M\)越大应该产生更好的结果;同时考虑到数据生成函数 \(sin(2\pi x)\) 的幂级数展开包含所有的次数,因此按理来说随着\(M\)增大,预测结果的准确性应该单调上升才对。我们来看一下,不同的\(M\)最后得到的\( \mathbf{w}^*\) 值:
可以看到随着 \(M\) 增大,\( \mathbf{w}^*\) 取值范围也越来越大,同时曲线的震荡幅度也非常大(Figure 1.4),以此来更好的拟合training data。事实上更大M的多项式越来越多的是去迎合target values上的random noise去了。
另外一个有趣的事情是随着training data的增大,在同一\(M\)值下过拟合的问题会减少,也就是说数据量越大,更适合 more complex/flexible 的模型。经验表明数据量的大小最少是参数大小的数倍(5或10),下图是\(M=9\)时,样本数分别为为15个和100个时曲线的拟合情况:
但是参数的多少并不是衡量模型复杂度最合适的度量,Chapter 3会讨论到。
根据training set 的大小来决定模型参数多少并不是明智的,应该根据问题的复杂程度来决定。后面我们会提到采用最小二乘法来解决模型参数问题。使用贝叶斯方法我们可以避免over-fitting问题,即使模型参数的数量远大于training set的大小。
我们想在有限的training data上使用更复杂模型但是又不希望看到太多的overfitting:采用regularization 正则化,引入一个惩罚因子,阻止系数值变得过大,最简单的惩罚因子是使用所有系数的平方和,修改前面的代价函数,加入惩罚因子:
\[ \tilde{E}(\mathbf{w})=\frac{1}{2}\sum_{n=1}^{N}\{y(x_n,\mathbf{w})-t_n\}^2 \, + \, \frac{\lambda}{2}\| \mathbf{w} \|^2 \]
其中,\( \| \mathbf{w}\|^2 \equiv \mathbf{w}^T\mathbf{w}=w_0^2+w_1^2+ \cdots +w_M^2 \),系数 \( \lambda \) 控制惩罚因子的权重。\( w_0\) 通常不被包含在正则化项中,或者采用单独的正则化系数(5.5.1会讨论)。下图显示了\(M=9\)时,在不同的 \( \lambda \) 值下的曲线:
可以看到,\( \mathbf{ln}\, \lambda=-18 \) 时(即\( \lambda=e^{-18} \)),曲线已经比较接近原函数了,overfitting问题不明显了; \( \mathbf{ln}\, \lambda=0 \)(即\( \lambda=1 \)),曲线欠拟合,说明正则化过了。下表是\(M\)=9时,在不同的 \( \lambda \) 值下得到的 \( \mathbf{w^*}\) 值,显示了正则化有效的控制了参数值的变化范围:
另外我们也可以看看 \( E_{RMS}\)随着\(\lambda \) 是如何变化的:
\(\lambda =0\) 时,过拟合严重,随着惩罚因子的介入,Test set上的\( E_{RMS}\) 明显好转,而Training set上的\( E_{RMS}\) 稍有提升;当\(\lambda>e^{-25} \)时, 两个数据集上的\( E_{RMS}\) 都同时上升,说明惩罚因子介入太深,模型已经显现出欠拟合。
模型复杂度问题会在1.3节中讨论,采用本节最小化错误函数方法,我们也应该找到恰当的函数复杂度(恰当的次数\(M\))。可以利用前面讨论的方法,将可用的数据分为两部分,一部分用来训练模型(得到\( \mathbf{w^*} \)) ,另外一部分为alidation set/hold-out set,用于优化模型复杂度(\( M \mbox{或}\lambda \)),可以如Figure 1.8 所示,计算不同的\( M\) 和 \( \lambda \) 下的\( E_{RMS}\) 找到一个较好的模型。很多情况下,这是比较浪费training set的。
下一节将主要介绍的概率论的一些基本思想和方法,是本书的基础。概率论方法提供了理论基础和更本质的方法去看待机器学习问题,同时帮助我们获得更加复杂而且精细的模型。