【模型评估与选择】

模型的评估与选择

本文是笔者西瓜书第二章的学习笔记,如有谬误,请随时指出。

经验误差与过拟合

首先我们需要明确一些概念:

  • 错误率(error rate): E = a / m E = a/m E=a/m,共 m m m个样本,其中 a a a个样本分类错误
  • 精度(accuracy): A c c = 1 − E Acc = 1-E Acc=1E
  • 误差(error):代表学习器的实际预测值和样本的真实值之间的差异
  • 经验误差(training error):代表学习器在训练过程中的误差,也称训练误差
  • 泛化误差(generalization error):在新样本(没见过的样本)上的误差

我们实际上希望得到泛化误差最小化的学习器,但是由于训练集的局限性,我们无法得知那些新样本是什么样的,因此我们只能从已知的训练集中获取足够多的有效信息,即使经验误差降低,从而希望泛化误差降低。

但是实际上使经验误差降低时,泛化误差并不一定降低。当经验误差降低,而泛化误差升高,这就代表过拟合。当经验误差降低,而泛化误差还未降低到极小值点,这就代表欠拟合

一般情况下,欠拟合比较容易克服,而过拟合一般无法彻底避免,我们能做的只有缓解。如果我们认为最小化经验误差,则代表最小化泛化误差,那么实际上我们就已经在多项式的时间内解决了一个 NP \text{NP} NP难问题,那么就构造的证明了 NP = P \text{NP}=\text{P} NP=P。因此只要认为 NP ≠ P \text{NP}\neq\text{P} NP=P,过拟合就无法避免。

那么既然不能直接获得泛化误差,并且训练误差由于过拟合的存在不适合作为标准,我们应该如何评估和选择模型呢?

评估方法

一般给定一个数据集,我们需要将其分割为测试集、训练集和验证集三部分:

  • 测试集(testing set):给出学习器对新样本的判别能力,用于近似泛化误差。
  • 训练集(training set):用于训练模型,降低经验误差。
  • 验证集(validation set):用于在调整超参数的过程中,给出模型的性能评估。

一般情况下,测试集和训练集在一开始就会区分开来,之后我们再人工的从训练集中分割出一部分当作验证集。下文给出分割训练集的各种方法。

留出法(hold-out)

将数据集 D D D划分为两个互斥的集合 T , V T, V T,V,其中验证集 V V V需要用分层采样的方式采样,目的是尽可能保持数据分布一致。同时单次留出法的估计结果不够稳定,我们需要多次划分,重复评估取平均值。

但是使用留出法会导致用 D D D T T T训练出来的模型存在一定差异,并且 V V V越大二者差异越大。

交叉验证法(cross validation)

将数据集 D D D分割为 k k k个大小相似的互斥子集,并且采用分层抽样,保证数据分布的一致性。每次将 k − 1 k-1 k1个子集当作训练集,余下的子集当作验证集,重复k次取平均即可。

k = m k=m k=m时,也就是交叉验证法的每个子集中只有一个样本时,称为:留一法(Leave-One-Out)。容易看出,留一法中评估的模型和用 D D D训练出来的模型十分相似,因此可以认为其结果比较准确,但是计算复杂度很高,一般不用。并且也未必比其他方法准确,No Free Lunch(NFL)定理依然适用。

自助法(bootstrapping)

给定包含 m m m个样本的数据集 D D D,在 D D D中有放回的采 m m m个样,得到 D ′ D' D,将 D ′ D' D当作训练集, D / D ′ D/D' D/D当作验证集。容易估计出大约有 36.8 % 36.8\% 36.8%的样本在验证集中(计算始终不被采样到的概率即可)。

由于自助法改变了数据集的初始分布,这会引入估计偏差。一般在数据量较少的情况下使用。

性能度量

对于回归任务,常用均方误差(mean squared error)度量:
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i − y i ) ) 2 , D = { ( x 1 , y 1 ) , … , ( x m , y m ) } E(f; D) = \frac{1}{m}\sum_{i=1}^m (f(\mathbf{x_i}-y_i))^2, D = \{(\mathbf{x_1}, y_1), \ldots, (\mathbf{x_m}, y_m)\} E(f;D)=m1i=1m(f(xiyi))2D={(x1,y1),,(xm,ym)}
如果确定了数据分布 D \mathcal{D} D和概率密度 p ( ⋅ ) p(\cdot) p(),均方误差为:
E ( f ; D ) = ∫ x ∼ D p ( x ) ⋅ ( f ( x ) − y ) d x E(f; \mathcal{D}) = \int_{\mathbf{x}\sim\mathcal{D}}p(\mathbf{x})\cdot (f(\mathbf{x})-y)\text{d}\mathbf{x} E(f;D)=xDp(x)(f(x)y)dx

查全率(recall)、查准率(precision)和F1指标

二分类问题的混淆矩阵如下:

真实情况预测结果预测结果
正例反例
正例TPFN
反例FPTN

进而可以得出查准率 P P P和查全率 R R R
P = TP TP + FP R = TP TP + FN P = \frac{\text{TP}}{\text{TP}+\text{FP}} \qquad R = \frac{\text{TP}}{\text{TP}+\text{FN}} P=TP+FPTPR=TP+FNTP

  • 查准率:在预测为正例的样本中,真实的正例的占比
  • 查全率:在真实为正例的样本中,预测为正例的占比

我们根据学习器的预测结果对样例排序,将学习器认为最有可能是正例的样本排在前面,然后将样本逐个预测为正类,计算当前的查全率和查准率,绘制图像(P-R曲线)。图像的横纵坐标分别是查准率和查全率,当一个学习器P-R曲线围成的面积大于另外一个学习器的P-R曲线围成的面积,说明该学习器性能更好。

但是面积往往不容易估算,我们需要一种更加简单的度量。可以用BEP(Break-Even Point),它是 P = R P=R P=R时的取值。同时也可以用F1指标
1 F 1 = 1 2 ⋅ ( 1 P + 1 R ) = 2 × TP 样例总数 + TP − TN \frac{1}{F1} = \frac{1}{2}\cdot \left(\frac{1}{P}+\frac{1}{R}\right) = \frac{2\times \text{TP}}{\text{样例总数}+\text{TP}-\text{TN}} F11=21(P1+R1)=样例总数+TPTN2×TP
这里运用了调和平均定义,由于调和平均相对于算术平均和几何平均更注重较小值。

对于多分类问题,可以看成是 n n n个二分类问题,给出下述定义:
macro- P = 1 n ∑ i = 1 n P i macro- R = 1 n ∑ i = 1 n R i macro- F 1 = 1 2 ⋅ ( 1 macro- P + 1 macro- R ) \text{macro-}P = \frac{1}{n}\sum_{i=1}^{n} P_i \\ \text{macro-}R = \frac{1}{n}\sum_{i=1}^{n} R_i \\ \text{macro-}F1 = \frac{1}{2}\cdot \left(\frac{1}{\text{macro-}P}+\frac{1}{\text{macro-}R}\right) macro-P=n1i=1nPimacro-R=n1i=1nRimacro-F1=21(macro-P1+macro-R1)

ROC与AUC

首先给出真正例率(True Positive Rate, TPR)和假正例率(False Positive Rate, FPR)的定义:
T P R = TP TP + FN F P R = FP TN + FP TPR = \frac{\text{TP}}{\text{TP}+\text{FN}}\qquad FPR = \frac{\text{FP}}{\text{TN}+\text{FP}} TPR=TP+FNTPFPR=TN+FPFP

  • 真正例率:在真实的正例中,被预测为正例的样本占比
  • 假正例率:在真实的反例中,被预测为正例的样本占比

类似与P-R曲线,依然按相同方式排序后,依次将样本预测为正例,然后绘制ROC曲线,图像的纵轴是TPR,横轴是FPR。依然可以计算ROC的包裹的面积,面积大的性能更好,面积大小就是AUC。

偏差与方差

首先给出该部分的符号定义, x \mathbf{x} x代表测试样本, y D y_D yD是数据集中 x \mathbf{x} x的标记, y y y代表真实标记, f ( x ; D ) f(\mathbf{x};D) f(x;D)是在训练集 D D D上模型 f f f关于 x \mathbf{x} x的预测输出。

对于回归问题,学习算法(关于训练集,此时随机变量是训练集 D D D)的期望误差为:
f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(\mathbf{x}) = \mathbb{E}_D[f(\mathbf{x}; D)] fˉ(x)=ED[f(x;D)]
使用样本数相同的不同训练集产生的方差为
v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(\mathbf{x}) = \mathbb{E}_D[(f(\mathbf{x};D)-\bar{f}(\mathbf{x}))^2] var(x)=ED[(f(x;D)fˉ(x))2]
噪声为
ϵ 2 = E D [ ( y D − y ) 2 ] \epsilon^2 = \mathbb{E}_D[(y_D-y)^2] ϵ2=ED[(yDy)2]
期望输出与真实标记之间的偏差(bias)为
b i a s 2 ( x ) = ( f ˉ ( x ) − y ) 2 bias^2(\mathbf{x}) = (\bar{f}(\mathbf{x})-y)^2 bias2(x)=(fˉ(x)y)2
我们假设噪声期望为0,即 E D [ ( y D − y ) ] = 0 \mathbb{E}_D[(y_D-y)]=0 ED[(yDy)]=0,可以得出算法的期望泛化误差:
E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = b i a s 2 ( x ) + v a r ( x ) + ϵ 2 E(f; D) = \mathbb{E}_D[(f(\mathbf{x};D)-y_D)^2] = bias^2(\mathbf{x})+var(\mathbf{x})+\epsilon^2 E(f;D)=ED[(f(x;D)yD)2]=bias2(x)+var(x)+ϵ2

因此泛化误差可以分解为偏差、方差与噪声之和。其中

  • 偏差:刻画了学习算法本身的拟合能力
  • 方差:刻画了数据扰动造成的学习性能的变化
  • 噪声:刻画了任务的难度
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值