2 模型评估和选择方法


在上一节中,提到过统计机器学习三要素:模型、策略和算法,其中的策略就是本节要详细阐述的模型评估和选择方法

2.1 模型的性能评估方法

2.1.1 损失函数(Loss Function)

损失函数(loss function)也被称为代价函数(cost function),一般来说,它用来衡量模型输出的预测结果与真实结果之间差异的函数。这种差异也被称为损失(loss)

对于监督学习来说很好理解,训练数据输入模型后会得到预测的输出,计算该输出与输入数据原本对应的标注(label)信息之间的差异,就是损失函数要做的事情。

但损失函数并不是只有监督学习才有,无监督学习也可以使用损失函数。在无监督学习中,虽然不存在标签数据,但是可以通过损失函数来评估模型的性能。
这些损失函数通常是通过衡量模型预测结果与原始数据之间的差异来定义的,比如:

  • 在聚类算法中,簇内误差是衡量同一个簇内的数据点与该簇的质心之间的平均距离,而簇间误差是衡量不同簇之间的数据点的平均距离。
    这些误差可以被视为一种衡量模型预测结果与原始数据之间的差异的损失函数。

  • 降维算法可以将高维数据转化为低维表示,这种低维表示可以用于可视化或进一步分析。
    在这种情况下,损失函数可以被定义为原始数据与降维后的数据之间的差异,而不需要真实的标签结果。

因此,损失函数不管是在监督学习还是在无监督学习中,都有广泛的应用。

常见的损失函数如下所示:

  1. 0-1损失函数
  2. 平方损失函数
  3. 绝对损失函数
  4. 对数损失函数

2.1.2 经验风险/损失(Empirical Risk/Loss)

通俗来讲,经验风险(也叫经验损失)就是对训练数据集损失函数值求平均值;因此,损失函数是计算经验风险的基础。
(相对损失函数而言,一般就是输入一次数据,就会计算一次损失函数值,所以损失函数值是针对某一次输入数据而言的。比如:一次输入一个样本,或者一个小批次的样本进行训练,所以损失函数通常都是计算的很小一部分数据的损失值。经验风险考虑的是全体训练数据。

经验风险最小化(Empirical Risk Minimization,ERM)准则是传统机器学习理论中的一个基本原则。它将机器学习问题转化为一个优化问题,其基于的假设是:如果一个模型训练数据集上的经验风险(平均损失函数)越小,那么该模型面对新的未知数据的预测能力就越好。

  • 在监督学习中,训练数据集包含了输入特征和相应的标签,ERM原则通过对训练数据集上的损失函数进行最小化,来选择最优的模型参数。
  • 在无监督学习中,训练数据集只包含输入特征,没有对应的标签,ERM原则通过对训练数据集上的损失函数进行最小化,来学习数据的内在结构和模式。

ERM原则也存在一些局限性,例如它可能会陷入局部最优解,或者在面对不平衡数据集时表现不佳。为了克服这些局限性,人们提出了各种改进的ERM原则,例如加权ERM、正则化ERM等。

2.1.3 期望风险(Expected Risk)

期望风险是根据概率分布来描述所有可能情况下的损失的平均值

通俗来讲是指模型在所有可能的数据上平均意义的预测误差,也就是全局风险。与经验风险不同,期望风险是针对所有可能的样本,而不仅仅是训练集中的样本

但是很明显,我们在训练模型的时候是无法做到考虑所有可能的数据的,训练数据集必定是有限的。所以虽然理论上来说,期望风险才能更好地刻画模型的预测误差,但是基于有限的训练数据集,我们只好用经验风险,(即基于可用的训练数据集)的平均预测误差,来评估模型的预测能力

只有当训练数据集的规模趋近于无穷大的时候,经验风险才会无限趋近于期望风险。

2.1.4 结构风险(Structural Risk)

上面提到,训练数据集趋于无穷大的时候,经验风险会无限趋近于期望风险。但是在实际实践中,训练数据集是有限的,甚至有时候由于条件所限,训练数据集的规模是很小的,那么这个时候的经验风险就不能够很好地去代表期望风险了。所以当样本容量较小时,通常会引入结构风险。

结构风险考虑了 模型的复杂度模型在训练数据上的拟合程度 之间的平衡,通过在经验风险中引入惩罚项(penalty term)来实现,这些惩罚项可以基于模型参数的大小或其他复杂度度量
结构风险对于模型的复杂度进行限制,以避免模型过度拟合训练数据,从而提高模型的泛化能力(泛化能力在下文提到)

所以在训练模型时,往往不只考虑经验风险最小化,也会考虑结构风险最小化(Structural Risk Minimization, SRM)准则

  • 惩罚项 $\lambda J(f)$ 也被称为正则项(regularizer),结构风险最小化也就是常说的 正则化(Regularization)

2.1.5 训练误差(training error)

训练误差(Training Error)是指在训练过程中,模型对于训练数据集的预测错误程度,它通常被用来衡量模型在训练数据上的拟合程度。
一般来说训练误差越小,说明模型在训练数据上的拟合程度越好。

  • 训练误差 vs 损失值
    • 相同点:都是涉及模型预测值与正确值之间的偏差;
    • 不同点:输入一次数据,就会通过损失函数计算出一次损失值;上面也提到过,损失值是针对单次输入的那一小部分数据的而言的;而训练误差考虑的是整个训练数据集
  • 训练误差 vs 经验风险
    • 相同点:都是涉及模型预测值与正确值之间的偏差、都是考虑的整个训练数据集;
    • 不同点:经验风险是模型在全体训练数据上的损失平均值,可以看做平均下来每个样本的损失值是多少;而训练误差是衡量对于训练数据,模型预测错误的程度;是一个程度,即一般是一个小数或者百分数来表示

2.1.6 测试误差(testing error)

测试误差指的是在测试数据集上评估已经训练好的模型时,模型对测试数据的预测错误程度。测试误差通常用来衡量模型对新数据的预测能力,即模型的泛化能力(泛化能力在下下文提到)。
测试误差越小,说明模型对新数据的预测能力越强,泛化性能越好。

2.1.7 过拟合(over-fitting)

上文谈及了过拟合,所谓过拟合现象,是指在模型训练过程中,模型对训练数据集的拟合过于完美,通常模型的复杂度也会变高,导致在新的、未见过的数据上的表现反而不如在训练数据集上的表现。

通俗的来讲,就是模型“死记硬背”住了训练集,但是对于没见过的测试集却表现很差,使得模型的训练误差很小,但是测试误差很大。

所以上面提到的结构风险,就是引入正则项,使得惩罚函数的值正比于模型复杂度,限制了模型过于复杂精妙,使其无法对训练集数据拟合的过于完美;除了引入正则项,还有其它方法能够避免模型的过拟合:

  • 补充训练数据集,增大其规模;
  • 调整模型本身的结构,使其复杂度降低;
  • “早停法”,即在训练过程中,当模型在测试数据集上的表现不再提升时,停止训练;
  • ……

2.1.8 欠拟合(under-fitting)

模型欠拟合是指模型在训练集上的表现不佳,不能很好地反映训练数据集的真实分布,同时其在新数据上的预测性能也会较差。

通俗来讲,就是模型还没有学到位。通常有以下办法来避免模型欠拟合:

  • 引入组合特征、高阶特征等;
  • 调整模型本身的结构,使其复杂度增加;
  • ……

2.1.9 模型泛化能力(Genralization Ability)

模型的泛化能力是指模型在新的未知数据上的表现能力

我们期望模型训练完成后不只是在训练集、验证集上有较好的预测能力,在面对各种测试集时也能有较好的预测能力。通俗来讲,就是“举一反三”的能力。

2.1.10 泛化误差(generalization error)

上文讲测试误差时,说过如果测试误差越小,就能认为模型的泛化能力越好。那么这里的泛化误差又是指的什么呢?

泛化误差指的是在所有可能的输入数据上评估已经训练好的模型时,模型对所有可能数据的预测错误程度泛化误差是一个理论上的概念,无法直接计算,但可以通过其他两个误差进行估计。
通常来说,泛化误差被看作是模型在未知数据上的预测能力的平均表现。

2.2 常见的模型选择方法

2.2.1 留出法(Hold-Out)

将数据集划分为两个互斥的集合:一个训练集和一个验证集(测试集);训练集用于训练模型,验证集(测试集)用于评估模型的预测能力。
一般可参考7:3的比例进行划分。

2.2.2 交叉验证法(Cross-Validation)

  • k 折交叉验证法
    将原始数据集随机划分为互斥的、规模差不多的K份子集;其中K-1份作为训练集,剩下的1份作为验证集(测试集)。

    这样,由于验证集(测试集)可以从K份当中任选一份,所以按照这种方法,就可以组成 k 组不同的 训练集、验证集(测试集)的组合。

    这样可以得到K次训练和验证的结果,最后通过对这K次结果的平均或选择最优的结果来评估模型的性能。

    以下是 k=10时,10折交叉验证法举例:


  • 留一法
    留一法是交叉验证的一种极端情况,它每一次都只用一个样本作为验证集,其余的样本作为训练集。比如训练集如果共有N个样本,则每一次只选1个样本作为验证集,其余的N-1个样本作为训练集;直到N个样本都作为验证集,得到N次训练的结果,然后对这N次结果进行平均或选择最优的结果来评估模型的性能。 留一法一般是在训练集规模,即N较小的时候采用的方法。

2.2.3 自助法(Bootstrap)

在可用的数据集规模较小时,可以采用自助法。这是一种有放回的随机采样方法。其操作如下:

1.从数据集中D随机采样出一个样本,将其记录;
2.将取出的样本放回数据集D中;
3.重复步骤1和2 m 次,就有 m 个样本被采样记录到,将这份记录作为 D’ ,作为训练集;
4.将D中除开D’的数据作为验证集(测试集)。

很明显,由于是有放回的抽样,每一次抽取时,每个样本都有机会被抽到;所以有的样本会被多次抽到,有的可能一次都无法被抽样到。
对于样本而言,每一次采样时,被采到的概率是 $\frac{1}{m}$ ,没采到的概率就是 $1-\frac{1}{m}$ ;
则在 m 次采样中,一直不会被抽到的概率为 $ {(1-\frac{1}{m})}^m $ ,求极限为:

2.2.4 正则化

上面2.1.4提到过结构风险(Structural Risk),即衡量模型复杂度的指标。而结构风险最小化(SRM)策略的一般实现,就是正则化,即在经验风险加上一个正则项(regularizer)或者叫惩罚项(penalty)。

正则项一般是模型复杂度的单调递增函数,模型复杂度越高,正则项的值就越大。

正则化的理论支持是奥卡姆剃刀(Occam’s Razor)原理:如无必要,勿增实体;对模型而言即简单模型更有效

本篇文章中涉及的参考资料12

1: 李航. (2019). 统计学习方法. 清华大学出版社.
2: 周志华. (2016). 机器学习. 清华大学出版社.