2.1.1 统计基础
1.输入空间、特征空间和输出空间
向量空间模型包括输入空间、特征空间与输出空间。输入与输出所有的可能取值的集合分别称为输入空间与输出空间,每个具体的输入是一个实例,通常由特征向量表示,由所有特征向量构成的空间称为特征空间。一般输入变量用x表示,输出变量用y表示。
训练数据和测试数据由输入输出对组成,例如{(x1,y1),(x2,y2),…,(xn,yn)}。这些成对出现的数据称为样本,其中输入和输出变量类型可以是连续的,也可以是离散的,不同类型的样本采用不同的求解方法。例如,如果x和y均为连续变量的预测问题,则可以用回归方法来解决;如果y为离散变量的预测问题,则可以用分类算法处理。
2.联合概率分布
联合概率表示两个或多个事件(变量)同时出现的概率,而联合概率分布是指各个变量的出现概率之间存在一定的规律,但是其分布情况未知。在有监督学习中,样本数据的训练可使各变量之间的联合概率分布情况逐渐明确。联合概率分布按变量的类型可分为离散随机变量联合分布和连续随机变量联合分布。
3.假设空间
假设空间(Hypothesis Space)是由输入空间到输出空间的映射构成的集合,而其中每个映射对应一个模型,假设空间确定了模型预测的范围,训练过程就是从中选择最优模型。监督学习的目标是学习一个由输入到输出的映射规律,其模型包括概率模型和非概率模型,前者由条件概率分布p(y|x)表示,后者由函数y=f (x)表示,模型确认之后就可以对具体的输入进行相应的输出预测。
4.均值、标准差、方差、协方差
首先给定一个含有n个样本的集合X={x1,…,xn},其中均值和标准差的计算方法相对简单,其计算公式如下。其中是样本集合的均值,s是样本集合的标准差。
均值描述的是样本集合的平均值,而标准差描述的是样本集合的各个样本点到均值的距离分布,描述的是样本集合的分散程度。例如{0,8,12,20}和{8,9,11,12}两个集合的均值都是10,计算两者的标准差,前者约是8.3,后者约是1.8,显然后者较为集中,其标准差小一些。
方差是标准差的平方,其计算公式如下:
此外,在机器学习中方差就是估计值与其期望值的统计方差,计算方法如下式,其中是模型的估计值,而表示期望值,期望值,由样本的值xi与其发生概率相乘的总和表示,反映的是随机变量均值。用估计值与期望值(均值)的差的平方表示模型预测稳定性。
进行大量的重复实验,就会发现模型在样本集上的结果值并非唯一,模型的输出值会在一定范围内变化,这种变化的范围越大,表示其方差就越大。
标准差和方差一般用来描述一维数据。面对多个维度的数据集,需要计算不同维度之间的关系,协方差主要用来度量两个随机变量关系:
协方差的结果有什么意义呢?如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义)。如果结果为负值,则说明两者是负相关的。如果为0,就是统计意义上的“相互独立”。
如果维度增加,就需要计算两两之间的协方差,这时就需要使用协方差矩阵了。以三维数据为例,数据集{x,y,z}的协方差矩阵如下:
可以看到,协方差矩阵是一个对称的矩阵,而且对角线是各个变量上的方差,对应n维数据x={x1,x2,…,xn}的协方差矩阵公式如下,其中μ是x的期望值。
5.超参数
超参数是机器学习算法的调优参数(Tuning Parameter),常应用于估计模型参数的过程中,由人工直接指定,可以使用启发式方法来设置,并能依据给定的预测问题而调整。例如,训练神经网络的学习率或逻辑回归损失函数中的正则化因子等。需要注意,超参数与模型参数不同,模型参数是学习算法拟合训练数据获得的参数,即这些参数是作为模型本身的参数而存在的。例如,线性回归的系数是模型参数。
6.损失函数和风险函数
损失函数是关于模型计算结果f(x)和样本实际目标结果y的非负实值函数,记作L(y,f(x)),用它来解释模型在每个样本实例上的误差。损失函数的值越小,说明预测值与实际值越接近,即模型的拟合效果越好。损失函数主要包括以下几种。
① 0-1损失函数。
0-1损失函数是一种最简单的损失函数,如果实际值y与f(x)的值不相等,则认为预测失败;反之,预测成功,损失为0。可见,该损失函数不考虑预测值和真实值的误差程度,只要预测错误,即使预测误差再小,也算预测错误。
② 平方损失函数。
平方损失函数计算的是实际目标值y与预测值f(x)之间的差的平方,其特点是非负,将差值进行放大。
③ 绝对损失函数。
绝对损失函数是对实际目标值y与预测值f(x)之间的差求绝对值,损失函数的结果为非负。
④ 对数损失函数。
对数损失函数用到了最大似然估计的思想。p(y|x)是指在当前模型的基础上,对于输入变量x,其预测值为y,也就是预测正确的概率。在公式中加负号,表示预测正确的概率越高,其损失值应该越小。
7.训练误差
模型的损失函数是模型训练误差的度量,而模型优化目标是全局损失,即所有样本的损失函数的均值最小,其中训练误差可以表示为
对于平方损失函数,就是对所有样本的误差求平方和,如下公式所示。为了求导方便,可以在前面乘1/2。
损失函数的期望Rexp是模型关于联合分布的期望损失,可以用如下公式表示,其中F是假设空间,Rexp称为风险函数或期望损失。
L [y,f(x)]可以被认为是模型的经验风险,是模型关于训练样本集的平均损失。通常情况下,经验风险可以由训练集的损失函数来确定。根据大数定律,当样本容量趋于无穷时,经验风险趋向期望风险。根据经验风险最小化的策略,如果最优模型的经验风险最小,就可以将模型选择转化为求解最小经验风险的问题。这一理论的前提是训练样本的数量要足够多,但是在现实应用中,这一条件很难满足。
假如样本数量较多,通过最小化经验风险学习即可。但是当样本量很少时,经验信息不足,通过最小化经验风险学习效果未必很好,当模型的复杂度过大时,训练误差会逐渐减小并趋近于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。
结构风险最小化(Structural Risk Minimization,SRM)针对经验风险最小化在小样本量时易产生过拟合问题进行了改进,增加了表示模型复杂度的正则化项,对模型复杂度进行限制。这一策略认为结构简单的模型最优,它的评估目标是模型复杂度。在其他变量都相同的情况下,模型结构风险最小化的定义如下:
其中J(f)为模型的复杂度,模型f越复杂,复杂度J(f)就越大;反之,模型f越简单,复杂度J(f)就越小。λ≥0是系数,用以权衡经验风险和模型的复杂度。结构风险小,要求经验风险与模型复杂度同时小。结构风险小的模型往往对训练数据以及未知的测试数据都有较好的预测。当模型是条件概率分布,损失函数是对数损失函数且模型复杂度由模型的先验概率表示时,结构风险最小化就等价于最大后验概率估计,监督学习问题就变成了经验风险或结构风险函数的最优化问题,这时经验风险或结构风险函数是最优化的目标函数。
损失函数反映了模型预测结果与实际结果之间的差距,理解损失函数的本质,有助于对算法进行优化,需要结合业务目标和数据特点对问题本质进行理解,并用数学公式进行抽象,选择较简单的实现方法应用。
8.正则化与交叉验证
正则化和交叉验证都是为了避免过拟合,其中正则化用于结构风险最小化,在经验风险上加正则化项或惩罚项,正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。例如正则化项可以是模型参数向量的范数。常用的正则化包括L1、L2正则化,它们也被称为范数,对应于结构化风险最小化中的λJ(f),即模型复杂度的惩罚项,称其为正则化项(Regularizer)。
如何增加正则化项呢?首先从理论上说,任何函数都可以用多项式的方式去逼近,而在下面结构化风险最小化公式中的f(x)可以用f(x)=w0+w1x+…+wmxm的形式来表示。
其中n是样本数,多项式函数中的wi就对应模型的参数。模型越复杂,其中wi的个数就越多,因此增加正则项的任务就是减少wi的个数,而L0、L1、L2这些正则化方法的目标均是使模型参数向量简化。
(1)L0正则化
L0正则化通过限制向量中非0的元素的个数实现模型优化,用L0来正则化一个参数矩阵W,目标是使其更稀疏,即使W中的大部分元素都是0。很明显,如果将最小化L0正则化作为惩罚项,就是寻找最优的稀疏特征项。但L0的最小化问题在实际应用中会出现NP困难问题(NP-Hard Problem)。因此很多情况下,L0优化问题会用L1、L2代替。
(2)L1正则化
L1正则化通过对参数向量中各个元素绝对值之和进行限制,任何正则化算子,如果在 wi=0的地方不可微,并且可以分解为多项式的形式,那么这个正则化算子就可以实现稀疏。与L0正则化相比,L1正则化不仅可以实现稀疏,而且L1正则化是L0正则化的最优凸近似,它比L0正则化容易优化求解。按照 L1正则化的定义,可以将结构风险中的模型复杂度λJ(W)表示为,其中λ表示正则化系数,m是模型的阶次,表示数据的维度。例如,m=2为二维的情况,对于权重w1和w2(w0=0),此时J(W)=|w1|+|w2|,如图2-1所示。其中图2-1(a)是将w1和w2分别作为x、y坐标,L作为z坐标绘制出来的;图2-1(b)是图2-1(a)的俯视图;对于梯度下降(Gradient Descent)法,求解的过程可以画出等值线,如图2-1(c)所示,不同色彩的圆圈表示损失函数寻找最小值的过程,参数矩阵W按照梯度下降法计算损失函数,不断向最小值的位置迭代,与L1交界的地方就是取得的极值点,这其实是两个曲面相交的地方。
图2-1 二维L1正则化
因为L函数有很多“突出的角”(二维情况下有4个),损失函数与这些角接触的概率会远大于与L的其“部位”接触的概率。而在这些角上,会有很多权重等于0,这就是L1正则化可以产生稀疏模型,进而可以限制模型中参数的数量,降低模型复杂度,防止过拟合的原因。与L2相比,L1做得更彻底、更稀疏。
正则化前面的系数λ,可以控制L图形的大小,λ越大,L的图形就越小;而λ越小,L的图形越大。同样地,损失函数的参数越多,图中的圆圈就越大。可以看到 λ 起到平衡两者的作用,因此λ也称为学习率(Learning Rate)。
(3)L2正则化
L2正则化是指向量各元素求平方和,用模最小化来确保w的每个元素都很小,都接近于0。与L1正则化不同,它不会等于0,而是接近于0。如图2-2(a)所示,在m为2时,它就是一个抛物面。俯视图如图2-2(b)所示,就是一个圆,与方形相比,被磨去了棱角。求解过程可画出等值线,如图2-2(c)所示。
图2-2 二维L2正则化
因此损失函数使w1或w2等于0的概率小了许多,这就是L2正则化不具有稀疏性的原因。但是,L2正则化通过将损失函数变为强凸函数,可以有效地加快梯度下降的收敛速度。
在算法调优时需要注意选择合适的正则化策略。L2准确度高,但是训练时间长;L1正则化可以做一定的特征选择,适合大量数据,在样本不均匀时可以调整损失函数中的权重。
拟合过程中,通常希望最后构造的模型中,所有参数都比较小。这样做可以减少模型的复杂度,适应不同的数据集,也在一定程度上避免过拟合。例如,在线性回归方程中,如果参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响,即参数小表示抗扰能力强。特别是特征数比样本数量多时,如果不加入L2正则化,会使模型的抗扰能力变差。而一旦加入正则化惩罚项,随着不断迭代,损失函数中的参数矩阵会不断减小。
在交叉验证方面,一般情况下,将数据集随机切分为训练集、验证集和测试集这3部分,其中训练集用来训练模型;验证集用于训练过程中模型的验证和选择,如果有多个模型,选择其中最小预测误差的模型;而测试集用于对最终训练完成的模型进行评估。在实际应用中,数据往往并不充足,此时可以采用交叉验证的方法,将训练集切分成很多份,然后进行组合,以扩大可用训练集的数量。按照样本切分和组合方式,交叉验证分为以下几种。
① Holdout检验。
将原始的数据集随机分成两个集合A和B,A作为训练集,B作为测试集。先使用训练集训练模型,然后利用测试集验证模型的效果,记录最后的分类准确率作为该模型的性能指标,其准确性可以用平均绝对误差(Mean Absolute Error,MAE)、平均绝对百分比误差(Mean Absolute Percentage Error,MAPE)等统计指标来衡量。这种方法的好处是简单,只需要把原始数据分成两个部分。但是严格意义上,Holdout检验并不算是交叉检验。
② 简单交叉验证。
首先,随机地将数据集分成两个部分,分别用作训练和测试,然后用训练集在各种条件下训练模型,得到不同的模型,在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
③ k折交叉验证。
将数据切分为k个互不相交的大小相同的数据集,利用k-1个子集训练,用剩下的一个子集测试,重复k次,选出平均测试误差最小的模型。显然,k取值越大,统计偏误就越小,但是需要的计算量越大。一些实验表明,当k取10时,在计算代价和性能之间能达到好的平衡。
④ 留一交叉验证。
在k折交叉验证中,当k为所有样本数N,在数据缺乏的情况下可使用留一交叉验证。假设样本数据集中有N个样本,将其中一个样本单独作为测试集,其余N-1个样本作为训练集,这样得到了N个模型,用这N个模型的分类准确率的平均数作为此分类器的性能指标。留一交叉验证的优点是每一个模型都用几乎所有的样本来训练模型,并且评估的结果比较可靠。它的缺点是计算成本高,特别是当N非常大时,计算耗时极长。