1. 交叉验证法概述
交叉验证是一种模型选择方法,在使用这种方法时,不需要做任何的假定,加之操作简便,故其具有更广泛的适应性,应用也较为普遍。
早先,人们在使用统计模型解决实际问题时,同一数据集既被用来进行模型训练,又被用来进行预测误差估计。但上世纪30年代,Larson (1931) [1] 发现采用既做训练集又做预测估计往往会使得估计结果偏向于乐观。为了克服这个问题,Stone (1974) [2] 提出了交叉验证的方法,并证实用一部分数据做训练集,余下的数据用来进行误差估计,得到的估计结果更为优良。在这之后,各国学者纷纷提出了交叉验证的多种方法,交叉验证有了巨大的发展。
首先受到大家关注的是留一交叉验证法,由Stone,Allen,Geisser (1974) [3] 等人提出,它的基本思想是每次从个数为n的数据中取出一个数据作为测试集,而将剩下的n − 1个数据作为训练集,这一操作重复进行n次,而这n次结果的平均值就是预测误差的估计值。这是交叉验证法中最常见的一种方法。Geisser (1975) [4] 提出了V折交叉验证法,这种方法首先把数据集平均分成V份,然后每次选择这V份中的一份作为测试集,其他的V-1份作为训练集,重复进行V次这样的操作,再把V次结果的平均值作为预测误差的估计。Devroye和Wagner (1979) [5] 提出了hold-out法,其主要思想是将数据集进行一次切分,一部分做训练模型,另一部分做测试估计误差。这是最为简单的一种交叉验证法。Shao (1993) [6] 提出了留P交叉验证法,它与留一交叉验证法较为类似,其基本思想是每次从n个数据中随机取出P个作为测试集,将余下的n − p个数据作为训练集,这一操作重复进行
次,最终所得的平均值即为预测误差的估计。此外,Shao还提出了平衡不完全交叉验证,可以将它看成留P交叉验证法的变异形式,它可以克服当P较大时计算比较复杂的不足,其基础是建立在平衡不完全集上的,从而可以保证每个数据在训练集和测试集中都具有相同的地位。Dietterich (1998) [7] 提出5*2交叉验证法。其主要思想是将数据集V平均分成V1(1)和V1(2)两部分,先用V1(1)做训练集,V1(2)做测试集,然后再交换,V1(2)做训练集,V1(1)做测试集,这样所得即为第一折。接下来将数据集V重新打乱,平均分为新的V2(1)和V2(2)两部分,用V2(1)做训练集,V2(2)做测试集,再交换,V2(2)做训练集,V2(1)做测试集,所得为第二折。将这种操作重复进行5次,就可以得到10个训练集和测试集。Dietterich特别指出,如果超过5次对折,各个集合之间共享的样本会过多,计算出来的预测误差估计极易相互依赖,无法增加新的信息,而在五折之前,这种数据共用的问题尚可容忍。
2. 数据分析
该数据源自一组乙炔的反应数据,总共有16个观测值。其中,响应变量向量y是正庚烷(n-heptane)转化为乙炔(acetylene)的转化百分比,自变量x1是反应釜的温度(摄氏),x2是氢气–乙炔转化百分比,x3是接触时间(单位是秒),如表1所示。

Table 1. Data of acetylene reaction
表1. 乙炔的反应数据表
考虑到各变量单位差异较大,为了同等对待每一变量,在分析前,先对各变量作标准化变换,标准化后的变量分别记为zy、zx1、zx2、zx3 (MATLAB程序中为书写方便用Y、X1、X2、X3表示)。
令
,利用MATLAB求得x1、x2、x3的相关关系矩阵为:
从相关关系矩阵可以看出,x1和x3之间的相关系数较大,接近于1,故我们认为x1与x3之间有线性相关关系。
3. 模型分析
考虑模型23 − 1个备选模型,其中的第s个模型为:
(1)
其中脚标集S取遍
的所有可能的非空子集。
将上述模型中的变量表示成矩阵的形式:
(2)
其中
,
,X和
因模型不同相应有所变化,将在下文中进行详细的讨论。
(一) OLS法模型估计
普通最小二乘法(OLS)是由德国数学家高斯最早提出和使用的。由于在一定的假设条件下,最小二乘估计量有着非常好的统计性质,从而使它成为回归分析中最有功效和最为流行的方法。
对于线性模型
,OLS法的思想是,
的真值应该使误差向量
达到最小,也就
是它的长度平方
达到最小,求解得到最小二乘估计
。
(二) RR法模型估计
岭回归(RR)是一种专用于共线性数据分析的有偏估计回归方法,实质上是对最小二乘估计法的一种改良,不再做无偏性的要求。它以损失部分信息、降低精度为代价,从而使得回归系数更符合实际、更可靠。
对于线性模型
,
的岭回归估计相对于最小二乘估计,在自变量信息矩阵的主对角线元素上人为地加入了一个非负因子,即
,其中岭参数k使用Hoerl & Kennard (1970) [8] 中的方法确定。
由于使用正交验证法,故用训练集进行参数估计,用测试集进行预测误差估计。上述两种方法各七种模型形式如表2所示。

Table 2. Seven models for model estimation with OLS and RR
表2. OLS法和RR法模型估计的七种模型表
(三) 留一交叉验证法模型选择 [9]
在前文中已经简单介绍过,在使用留一交叉验证法时,每次从n个数据中取出一个数据作为测试集,而将其他n − 1个数据作为训练集,这一操作重复进行n次,而这n次结果的平均值就是预测误差的估计值。使用MATLAB进行交叉验证,得到上述14个模型的预测误差如表3所示。

Table 3. Prediction error of models with OLS and RR
表3. OLS法和RR法估计的模型的预测误差表
如果只根据预测误差的最小值来判定,在上述14个模型中应当选择只含变量x1(zx1)的最小二乘估计模型,但考虑到x1、x2、x3对y均有影响,只用一个变量可能不能很好地反映y受到影响的各个方面。根据前面进行的变量间相关性的分析,我们知道x1与x3之间存在线性关系,当这两个变量同时出现在模型中时,根据预测误差值可以明显地看出岭回归法估计的模型优于最小二乘法估计的模型。故如果我们希望x1、x2、x3三个变量均出现在模型中,则应选择RR法估计的模型。如果是选择含两个变量的模型,结合变量间的相关性,选择含变量x1、x2的最小二乘估计模型。
4. 合理性探讨
我们注意到响应变量y与自变量x2均为转化百分比,是成分数据,而自变量x1 (温度)与x3 (时间)并不是,这样直接建立的线性模型可能效果并不是十分好。成分数据是一种在社会、经济、技术等多领域应用十分广泛的数据类型,结合前人的研究,这类数据可以考虑利用对数变换来进行建模,一方面可以起到降维的作用,另一方面解释起来也更为合理。
5. 结语
本文通过采用最小二乘估计法和岭回归法对一个具体的实例进行线性模型估计,并采用留一交叉验证法对模型进行选择,但仅凭交叉验证法估计的预测误差进行判断所得结果未必理想,还需要适当结合实际情况,所得结果才更令人信服。此外,对于成分数据直接进行线性回归可能并不是最为恰当的,还需要我们多加探索,认真实验。