模型评估与选择

误差与过拟合

错误率

通常我们把分类错误的样本数占样本总数的比例称为错误率。假设 m 个分类样本中有a个错误样本,则错误率为

$$
E=a/m
$$

相应的,精度则是 $1-a/m $。

学习器实际预测输出与样本的真实输出之间的差异称为误差。在训练集上的误差称为经验误差或者训练误差,在新样本上的误差称为泛化误差

过拟合与欠拟合

我们实际希望的,是在新样本上能表现得很好的学习器.为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别,然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为过拟合(overftting)。与过拟合相对的是欠拟合(underftting),这是指对训练样本的一般性质尚未学好。

有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等,而过拟合则很麻烦。

评估方法

我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个测试集(testing set)来测试学习器对新样本的判别能力,然后以测试集上的测试误差(testing error)作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得.但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

留出法

留出法(hold-out)直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集 T,即 $ D=S\cup T, S \cap T= \varnothing $。在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。

训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为分层采样(stratifedsampling)。

单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

交叉验证法

“交叉验证法”(cross validation)先将数据集 D 划分为 k 个大小相似的互斥子集,即 $D=D\cup D_2\cup … \cup D_k, D_i\cap D_j,=ø(i≠ j)$。每个子集 $D_i$ 都尽可能保持数据分布的一致性,即从$D$中通过分层采样得到.然后,每次用 k-1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得$k$组训练/测试集,从而可进行$k$次训练和测试,最终返回的是这$k$个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于$k$的取值,为强调这一点,通常把交叉验证法称为k折交叉验证(k-fold cross
validation)。$k$最常用的取值是$10$,此时称为10折交叉验证
QQ20250413-104557.png

自助法

我们希望评估的是用 D 训练出的模型,但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D 小,这必然会引入一些因训练样本规模不同而导致的估计偏差.留一法受训练样本规模变化的影响较小,但计算复杂度又太高了.有没有什么办法可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计呢?

“自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础。给定包含 m 个样本的数据集 D,我们对它进行采样产生数据集 D:每次随机从 D 中挑选一个样本,将其拷贝放入 D’,然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集 D’这就是自助采样的结果.显然,D 中有一部分样本会在 D’中多次出现,而另一部分样本不出现.可以做一个简单的估计,样本在 m 次采样中始终不被采到的概率是$(1-1/m)^m$。取极限得到约等于 0.368。

即通过自助采样,初始数据集 $D$ 中约有 $ 36.8%$ 的样本未出现在采样数据集$D$中。于是我们可将 D’用作训练集, $D \ D^` $用作测试集; 这样,实际评估的模型与期望评估的模型都使用 m 个训练样本,而我们仍有数据总量约 1/3 的、没在训练集中出现的样本用于测试.这样的测试结果,亦称“包外估计”(out-of-bag estimate).

性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

在预测任务中,给定样例集 $D= \lbrace(x_1,y_1),(x_2,y_2),·.·,(x_m,y_m) \rbrace$,其中 $y_i$是示例$x_i$的真实标记.要评估学习器 f 的性能,就要把学习器预测结果 f(x)与真实标记 y 进行比较。

在回归预测中,最常用的性能度量是均方误差(mean squared error)

$$
E(f:D)=\frac{1}{m}\sum_{i=1}^{m}(f(x_i)-y_i)^2
$$

对于数据分布$D$和概率密度函数$p(·)$,均方误差可描述为

$$
E(f:D)=\int_{x\sim D}^{} (f(x)-y)^2 p(x)dx
$$

错误率与精度

在文章开头已经提过这两个概念。这里再介绍以下对于数据分布 D 和概率密度函数 p(·),错误率与精度可分别描述为。

$$
E(f:D) = \int_{\mathfrak{X} \sim D} I(f(x) \neq y) , p(x) , dx
$$

查准率、查全率、F1

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令 TP、FP、TN、FN 分别表示其对应的样例数,则显然有 TP+FP+TN+FN=样例总数.分类结果的“混淆矩阵”(confusion matrix),如下所示:

QQ20250413-145417.png

查准率$P$和查全率$R$定义为:

$$
P = \frac{TP}{TP + FP},
$$

$$
R = \frac{TP}{TP + FN}.
$$

查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低,反之亦然。