从一个回归问题开始:给定一个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_1ldots,t_N)^T)
training set由函数 (sin(2pi x))生成,同时为每个(t_i)加入高斯分布的noise,加入noise可以更贴近真实的数据,这样实验数据既有潜在的规律,同时也保留了真实数据中的一些随机噪声。下图显示了10个样本数据, (mathbf{x}) 的取值空间为[0,1] :
我们的目标就是:给定一个新的input variable (widehat{x}),我们能够预测出对应的target value (widehat{t}). 因此我们需要从training set中找出隐含的函数 (sin(2pi 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(2pi 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 正则化,引入一个惩罚因子,阻止系数值变得过大,最简单的惩罚因子是使用所有系数的平方和,修改前面的代价函数,加入惩罚因子:
[ ilde{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}^Tmathbf{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的。
下一节将主要介绍的概率论的一些基本思想和方法,是本书的基础。概率论方法提供了理论基础和更本质的方法去看待机器学习问题,同时帮助我们获得更加复杂而且精细的模型。