ZiSeoi 的西瓜书笔记(二):第二章 模型评估与选择

ZiSeoi 的西瓜书笔记(二):第二章 模型评估与选择

经验误差与过拟合

这里提出了衡量机器学习模型性能的几个基本概念

  1. 错误率(error rate):分类错误的样本数样本总数的比率,反之称为精度(accuracy)。精度与错误率的关系如下:
    a c c u r a c y = 1 − e r r o r r a t e accuracy = 1 - error rate accuracy=1errorrate

  2. 误差(error):学习器的预测输出样本的真实输出之间的差异。

  3. 训练误差(training error)或经验误差(empirical error):学习器在训练集上的误差。

  4. 泛化误差(generalization error):在新样本上的误差。我们的目标是得到一个泛化误差小,即在新样本上表现很好的学习器。

  5. 过拟合(overfitting):当学习器把训练样本学得太好了的时候,很可能已经把训练样本自身的一些特点当作所有潜在样本的一般性质,这可能导致泛化能力降低。

  6. 欠拟合(underfitting):对训练样本的一般性质尚未学好。相对过拟合,欠拟合比较容易克服,一般增加训练即可。

  7. 机器学习中模型选择(model selection):对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。

评估方法

留出法

直接将数据集 D 分成两个互斥的集合,其中一个训练集 S,一个测试集 T,即 S 并 T = D,S 交 T = 空集。在 S 上训练出模型后,用 T 来评估该模型的测试误差,作为其泛化误差的估计。

扫描二维码关注公众号,回复: 11653283 查看本文章

注意:训练集\测试集的划分应该尽可能保持数据分布的一致性,避免造成数据划分过程引入额外的偏差而对最终结果产生影响。一般采用分层采样(stratified sampling)的方式保留类别比例的采样方式。

使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果,同时可得估计结果的标准差。这样的划分会导致训练样本变小,导致评估结果不够稳定准确,常见做法是将大约 2/3~4/5 的样本用于训练,剩余用于测试。

交叉验证法

将数据集 D 分成 k 个大小相似的互斥子集,每个子集尽可能保持数据分布的一致性,即从 D 中分层采样取得的。然后,每次用 k-1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就获得了 k 组训练/测试集,从而进行 k 次训练与测试,最终返回的是这 k 个测试结果的均值。这种方法也称为 k 折交叉验证(k-fold cross validation)。k 常为10。

交叉验证法的一特例:留一法(Leave-One-Out),即数据集 D 中包含 m 个样本,每次划分只拿一个样本作为测试集。留一法只有唯一的划分方式,所以不受随机划分样本的影响。

同时留一法中实际被评估的模型与期望评估的用 D 训练出的模型很相似。缺陷是在数据集比较大时,训练 m 个模型的计算开销很大。另外,留一法的估计结果也未必比其他评估方法准确。

自助法

为了减少训练样本规模不同造成的影响,同时比较高效地进行实验估计,自助法(可重复采样或有放回采样)是一种比较好的解决方案。

自助法自助采样法(bootstrap sampling)为基础。给定包含 m 个样本的的数据集 D,对它进行采样产生数据集 D’:每次随机从 D 中挑选一个样本,将其拷贝放入 D’,然后将其放回初始数据集 D 中,使得下次采样可能采到;这个过程重复 m 次后,得到一个包含 m 个样本的数据集 D’,这就是自助采样的结果。样本中 m 次采样未被选出的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1m1)m,若 m → + ∞ m\rightarrow+ \infty m+ 时,为 1 e = 0.368 \frac{1}{e}=0.368 e1=0.368,因此通过自助采样,初始数据集 D 中约有 36.8% 未被选入 D’ 中,于是将 D’ 当作训练集,将 D-D’ 当作测试集。这样的测试结果称为包外估计(out-bag-estimate)。

自助法常用于数据集较小、难以有效划分训练/测试集时有用。它还能产生多个不同的训练集,对集成学习有很大好处。然而,它改变了初始数据集的分布,会引入偏差。所以,数据集足够时,常用留出法和交叉验证法。

调参

调参(parameter tuning)对学习算法参数进行设定。许多学习算法的很多参数是在实数范围内取值,常采用对每个参数选定一个范围和变化步长,这是一种在计算开销和性能估计上折中的方法。

在模型评估和选择后,学习算法和参数配置已选定后,再用数据集 D 对模型重新训练一次,这个模型在训练过程中使用了 m 个样本,这才是我们最终提交给用户的模型。

性能度量

给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \} D={ (x1,y1),(x2,y2),...,(xm,ym)} ,其中 y i y_{i} yi y i y_{i} yi 的标记,要评价学习器 f f f ,就要把学习器预测结果 f ( x ) f(x) f(x) 与真实标记 y y y 比较。
回归任务最常用的性能度量是“均方误差”(mean squared error)
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D) = \frac{1}{m} \sum_{i=1}^{m}(f(x_{i})-y_{i})^2 E(f;D)=m1i=1m(f(xi)yi)2
更一般的,对于数据分布 D D D 和概率密度函数 p ( ⋅ ) p(·) p() ,均方误差可以描述为
E ( f ; D ) = ∫ x ∈ D ( f ( x i ) − y i ) 2 p ( x ) d x E(f;D) = \int_{x \in D}(f(x_{i})-y_{i})^2p(x)dx E(f;D)=xD(f(xi)yi)2p(x)dx

错误率和精度

错误率
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_i)\ne y_i) E(f;D)=m1i=1mI(f(xi)=yi)
精度
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) acc(f;D)=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_i)= y_i) \quad\\ =1-E(f;D) acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D)
对于连续型,公式调整为
E ( f ; D ) = ∫ x ∈ D I ( f ( x i ) ≠ y i ) p ( x ) d x E(f;D)=\int_{x\in D}\mathbb{I}(f(x_i)\ne y_i)p(x)dx E(f;D)=xDI(f(xi)=yi)p(x)dx
a c c ( f ; D ) = ∫ x ∈ D I ( f ( x i ) = y i ) p ( x ) d x = 1 − E ( f ; D ) acc(f;D)=\int_{x\in D}\mathbb{I}(f(x_i)= y_i)p(x)dx \\ =1-E(f;D) acc(f;D)=xDI(f(xi)=yi)p(x)dx=1E(f;D)

查准率、查全率和 F1

这里提到了两个基本的性能度量:

  1. 查准率、准确率(precision)
  2. 查全率、召回率(recall)

对于二分类任务,样例根据真实结果和预测出来的结果划分为 TP(true positive),FP(false positive),TN(true negative),FN(false negative),由此产生了分类结果混淆矩阵。

真实情况 预测结果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)

查准率 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP 、查全率 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP 。查准率和查全率是一对矛盾的度量。通常只有一些简单的任务才会有较高的查准率和查全率。

在很多情形下,根据学习器的预测结果对样例进行排序,排在前面的是学习器认为最可能是正例的样本,相反排在后面的是学习器认为最不可能是正例的样本。

查准率-查全率曲线(P-R曲线):若一个学习器的P-R曲线被另一个P-R曲线完全包住,则后者性能优于前者。还有一种合理的依据是比较 P-R 曲线的面积的大小。

平衡点(break-even point,BEP):查准率=查全率时的取值。

F1度量
F 1 = 2 ∗ P ∗ R P + R = 2 ∗ T P 样 例 总 数 + T P − T N F1=\frac{2*P*R}{P+R}=\frac{2*TP}{样例总数+TP-TN} F1=P+R2PR=+TPTN2TP
F1是基于查准率和查全率的调和平均定义的
1 F 1 = 1 2 ∗ ( 1 P + 1 R ) \frac{1}{F1}=\frac{1}{2}*(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
一般形式
1 F β = 1 1 + β 2 ( 1 P + β 2 R ) \frac{1}F_β=\frac{1}{1+β^2}(\frac{1}P+\frac{β^2}R) F1β=1+β21(P1+Rβ2)
β < 1 β<1 β<1 对查准率有很大影响, β > 1 β>1 β>1 对查全率有很大影响。调和平均相对算术平均 P + R 2 \frac{P+R}{2} 2P+R 与几何平均 P ∗ R \sqrt{P*R} PR 更重视最小值。

ROC 与 AUC

ROC曲线:纵轴是真正例率(True Positive Rate,TPR),横轴是假正例率(False Positive Rate,FPR),其中
T P R = T P T P + F N , F P R = F P F P + T N TPR=\frac{TP}{TP+FN},FPR=\frac{FP}{FP+TN} TPR=TP+FNTPFPR=FP+TNFP
P-R曲线作用:用来衡量模型的性能。学习器的P-R曲线下围成面积越大,学习器性能越好。

在这里插入图片描述
学习器的比较跟 P-R 图相似。当 ROC 曲线出现交叉时,这时需要比较 ROC 曲线的面积,即 AUC(Area Under ROC Curve)。

在这里插入图片描述
就是与反正例率轴所围面积。从有限样例ROC曲线估算,得
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ∗ ( y i + y i + 1 ) AUC=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_{i}) *(y_{i} +y_{i+1}) AUC=21i=1m1(xi+1xi)(yi+yi+1)
AUC考虑的是样本预测的排序质量,因此它跟排序误差有紧密联系。AUC的直观含义是任意取一对正反例,正样本得分大于负样本得分的概率。因此有排序损失(loss)定义为
L r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − [ I ( f ( x + ) < f ( x − ) ) + 1 2 I ( f ( x − ) = f ( x + ) ) ] \mathscr{L}_{rank}= \frac{1}{m^+ m^-}\sum_{x^+ \in D^+}\sum_{x^- \in D^-} [\mathbb{I}(f(x^+) <f(x^-)) \\+ \frac{1}2\mathbb{I}(f(x^-)=f(x^+))] Lrank=m+m1x+D+xD[I(f(x+)<f(x))+21I(f(x)=f(x+))]
通过观察,易得
A U C = 1 − L r a n k AUC=1- \mathscr{L}_{rank} AUC=1Lrank

代价敏感错误率与代价曲线

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。

代价矩阵(cost matrix): c o s t i j cost_{ij} costij 表示第 i 类样本预测为第 j 类样本的代价。一般来说 c o s t i j = 0 cost_{ij}=0 costij=0 。之前的性能度量大都隐式地假设了均等代价。在非均等代价下,希望最小化总体代价,而不是简单地最小化错误次数。下面以二分类问题为例子

真实类别 预测类别
第 0 类 第 1 类
第 0 类 0 cost01
第 1 类 cost10 0

如果在二分类任务中,将代价矩阵的第 0 类改为正例,第 1 类改为反例,则代价敏感错误率(cost-sensitive)
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) ∗ c o s t 01 + ∑ x i ∈ D − ( f ( x i ) ≠ y i ) ∗ c o s t 10 ) E(f;D;cost)= \frac{1}{m}(\sum_{x_i\in D^+} \mathbb{I}(f(x_i)\ne y_i)*cost_{01} \\\quad\quad\quad\quad\quad\quad\quad + \sum_{x_i\in D^-}(f(x_i)\ne yi)*cost_{10}) E(f;D;cost)=m1(xiD+I(f(xi)=yi)cost01+xiD(f(xi)=yi)cost10)
在非均等代价下,ROC曲线不能直接反映学习器的期待总体代价,而代价曲线(cost curve)可以。代价曲线的横轴取值为 [0,1] 的正例概率代价
P ( + ) c o s t = p ∗ c o s t 01 p ∗ c o s t 01 + ( 1 − p ) ∗ c o s t 10 P(+)cost=\frac{p*cost_{01}}{p*cost_{01} +(1-p)*cost_{10}} P(+)cost=pcost01+(1p)cost10pcost01
其中 p 为样例为正例的概率。纵轴是取值为[0,1]的归一化代价
c o s t n o r m = F N R ∗ p ∗ c o s t 01 + F P R ∗ ( 1 − p ) ∗ c o s t 10 p ∗ c o s t 01 + ( 1 − p ) ∗ c o s t 10 cost_{norm}=\frac{FNR*p*cost_{01}+FPR*(1-p)*cost_{10}}{p*cost_{01}+(1-p)*cost_{10}} costnorm=pcost01+(1p)cost10FNRpcost01+FPR(1p)cost10
其中 F N R = 1 − T P R FNR=1-TPR FNR=1TPR
规范化(normalization):将不同变化范围的值映射到相同的固定范围中,常见的是 [0,1],也是归一化。

在这里插入图片描述
代价曲线的绘制:ROC 曲线上的每一个点对应代价平面上的一条线段,设 ROC 曲线上的点的坐标为(FPR,TPR),则可计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的曲线,线段下的面积即表示了该条件下的期望总体代价;如此将 ROC 曲线上的每一个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。

比较检验

  1. 假设检验:对某个未知参数做出假设,这个未知参数通常是总体样本集的某个参数,但是我们没办法获得(比如一批灯泡的平均使用寿命)。给出显著度 α α α,在假设的前提下,求出满足显著度和假设的置信区间,然后对比被假设参数是否在置信区间内:若在,接受假设;若不在。拒绝假设。
  2. 假设检验假设:假定测试样本是从样本总体分布中独立采样而得。
  3. 对泛化错误率使用假设检验:首先假设泛化错误率 ε ≤ ε 0 ε\leε_0 εε0,给出显著度 α α α。然后求出在满足泛化错误率 ε = ε 0 ε=ε_0 ε=ε0、显著度为 α α α 的条件下最大临界错误率 ε ˉ \barε εˉ 。第三步:判断实际测试错误率和临界错误率 ε ˉ \barε εˉ 关系,来看是否接受假设。
  4. 二项检验:适用单个学习器单次检验。假定测试样本是从样本总体分布中独立采样而得。采用假设为 ε = ε 0 ε=ε_0 ε=ε0。变量二项分布。
  5. t t t 检验:适用单个学习器多次重复的检验。假定测试样本是从样本总体分布中独立采样而得。采用假设为 ε = ε 0 ε=ε_0 ε=ε0。变量 t t t 分布。
  6. k k k 折交叉验证成对 t t t 检验:适用两个学习器性能对比检验。是 t t t 检验在 k k k 折交叉验证上的应用。假定测试样本是从样本总体分布中独立采样而得。采用假设为各学习器性能相同。变量 t t t 分布。
  7. 5x2 交叉验证:独立采样假设不成立。做 5 次 2 折交叉验证,是 k k k 折交叉验证的变形。采用假设为各学习器性能相同。变量 t t t 分布。
  8. M c N e m a r McNemar McNemar 检验:适用比较两个二分类学习器的性能。采用假设为各学习器性能相同。变量χ2分布。
  9. F r i e d m a n Friedman Friedman 检验:适用多个学习器性能检验。采用假设为各学习器性能相同。当假设被拒绝时,采用后续检验进一步区分各个算法性能,比如 N e m e n y i Nemenyi Nemenyi 后续检验。变量F分布
  10. N e m e n y i Nemenyi Nemenyi 后续检验:适用比较多个算法性能,配合 F r i e d m a n Friedman Friedman 检验来进一步区分不同算法性能。采用假设为各个学习器性能相同。变量为 T u k e y Tukey Tukey 分布。

偏差与方差

偏差-方差分解"(bias-variance decomposition)是解释学习算法泛化性能的重要工具。

偏差体现了学习器预测的准确度,方差体现了学习器预测的稳定性,而噪声体现了学习的难度。

以回归任务为例,学习算法的期望预测为
f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x)=\mathbb{E}_D[f(x;D)] fˉ(x)=ED[f(x;D)]
样本数相同的不同训练集产生的方差
v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(x)=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2] var(x)=ED[(f(x;D)fˉ(x))2]
噪声为
ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^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(x)=(\bar{f}(x)-y)^2 bias2(x)=(fˉ(x)y)2
为了简化运算,设噪声期望为零,即 E [ y D − y ] = 0 \mathbb{E}[y_D-y]=0 E[yDy]=0 ,对算法的期望泛化误差进行分解
E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) + f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f ˉ ( x ) ) ( f ˉ ( x ) − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y + y − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + 2 E D [ ( f ˉ ( x ) − y ) ( y − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + ( f ˉ ( x ) − y ) 2 + E D [ ( y − y D ) 2 ] E(f;D)=\mathbb{E}_D[(f(x;D)-y_D)^2] \\=\mathbb{E}_D[(f(x;D)-\bar{f}(x)+\bar{f}(x)-y_D)^2] \\\quad\quad=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2] +\mathbb{E}_D[(\bar{f}(x)-y_D)^2] \\\quad+\mathbb{E}_D[2(f(x;D)-\bar{f}(x))(\bar{f}(x)-y_D)] \\\quad\quad=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y_D)^2] \\\quad\quad=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y+y-y_D)^2] \\=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y)^2] \\+\mathbb{E}_D[(y-y_D)^2]+2\mathbb{E}_D[(\bar{f}(x)-y)(y-y_D)] \\=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+(\bar{f}(x)-y)^2 +\mathbb{E}_D[(y-y_D)^2] E(f;D)=ED[(f(x;D)yD)2]=ED[(f(x;D)fˉ(x)+fˉ(x)yD)2]=ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)yD)2]+ED[2(f(x;D)fˉ(x))(fˉ(x)yD)]=ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)yD)2]=ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)y+yyD)2]=ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)y)2]+ED[(yyD)2]+2ED[(fˉ(x)y)(yyD)]=ED[(f(x;D)fˉ(x))2]+(fˉ(x)y)2+ED[(yyD)2]
于是有
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ε 2 E(f;D)=bias^2(x)+var(x)+\varepsilon^2 E(f;D)=bias2(x)+var(x)+ε2
得到结论,泛化误差可以分解为偏差、方差与噪声之和。

一点总结

  1. 欠拟合比较好解决,过拟合则很麻烦,而且必须认识到过拟合是无法避免的,我们所做的只能是“缓解”。
  2. 评估机器学习算法,可以尝试自助法、交叉验证法与留出法,这些方法有各自的适用的条件。
  3. 对于机器学习的性能度量,基本的衡量标准有查准率、准确率(precision)与查全率、召回率(recall),同时也可以通过画出P-R 曲线、ROC 曲线与代价曲线等进行评估。
  4. 若需要知道机器学习算法是否达到使用要求,需要对算法进行检验。
  5. 泛化误差可以分解为偏差、方差与噪声之和。

本人以后会发布一些关于机器学习模型算法,自动控制算法的其他文章,也会聊一聊自己做的一些小项目,希望读者朋友们能够喜欢。

猜你喜欢

转载自blog.csdn.net/wzduang/article/details/108039242