吃瓜教程 | 学习笔记–第二章 模型评估与选择

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、经验误差与过拟合

经验误差:学习器的实际预测输出与样本的真实输出之间的差异称为"误差" (error), 学习器在训练集上的误差称为"训练误差" (training error) 或"经验误差" (empirical error)。

泛化误差:在新样本上的误差称为"泛化误差" (generalization error).

显然我们大家都希望得到一个泛化误差小的学习器,但是事先我们并不知道新样本是啥样的,然后我们为了达到这个目的就让学习器尽可能的学习到新样本的特征,然而往往学习器会学的太多了,将一些样本的本身的特征学习进去,这样就导致泛化能力的下降,这就是我们所说的过拟合。

有很多情况会导致过拟合,最常见的就是学习能力过强,而欠拟合就正好相反。在后面的学习中我们会发现,欠拟合并不是大问题,往往是过拟合难以解决。


二、评估方法

1.留出法

定义:“留出法” (hold-out) 直接将数据集 划分为两个互斥的集合,其中一个集合作为训练集 S ,另一个作为测试集 T ,即 D = S U T ,S ∩ T = ⊘。 在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计.

需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似.

另一个需注意的问题是,即使在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集进行分割。单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果.例如进行 100 次随机划分,每次产生一个训练/测试集用于实验评估,100 次后就得到 100 个结果,而留出法返回的则是这 100 个结果的平均.

2.交叉验证法

定义:“交叉验证法” (cross alidation) 将数据集 D 分为 k 个大小相似的互斥子集,即 D = D1 U D2 U… U Dk, Di ∩ Dj = ø ( i != j )。每个子集 Di 尽可能保持数据分布的一致性,即从通过分层采样得到后,每次用 k-1 子集的并集作为训练集;余下的那个子集作测试集;这样就可获得组训练 / 测试集,从而可进行 k 次训练和测试,最终返回的是这个 k 次测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值,为了强调这一点,通常把交叉验证法称为 " k 折交叉验证" (k-fold cross validation).

下图是10折交叉验证的示意图:
10折交叉验证

3.自助法

定义:“自助法” (bootstrapping) 是一个比较好的解决方案,它直接以自助采样(bootstrap sampling) 为基础. 给定包含 m 个样本的数据集 D .我们对它进行采样产生数据集 D’: 每次随机从 D 中挑选一个样本,将其拷贝放入 D’ 然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含个样本的数据集 D’ ,这就是自助采样的结果.

自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处.然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差.因此,在初始数据量足够时,留出法和交叉验证法更常用一些.


三、性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需
要有衡量模型泛化能力的评价标准,这就是性能度量。
性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的"好坏"是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求.

1.错误率与精度

本章开头提到了错误率和精度,这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例.
分类错误率定义为:
分类错误率分类精度定义为:
精度定义对于数据分布 D 和概率密度函数 p(.) , 错误率与精度可分别描述为:
在这里插入图片描述在这里插入图片描述

2.查准率、查全率与F1

错误率和精度虽然很常用,但是很多任务的需求单是这两个性能度量是远远不够的,“查准率”,"查全率"在一些任务中也很常见。

在二分类问题中,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive) 、假正例 (false positive) 、真反倒(true negative)、假反例(false negative) 四种情形,令 TP、 FP、 TN、 FN 分别表示其对应的样例数,则显然有 TP+FP+TN+FN=样例总数.

分类结果的"泪淆矩阵"如图所示:
在这里插入图片描述
查准率与查全率分别定义为:
在这里插入图片描述
查准率和查全率是一个互相矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低.例如,若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就会较低。
人们设计了一些综合考虑查准、查全率的性能度量,BEP就是这样的一个度量,它是查准和查全相等时的取值,更常用的是F1度量
在这里插入图片描述

3.ROC和AUC

ROC曲线纵轴是"真正例率"简称TPR,横轴是"假正率"简称FPR。两者的定义分别是
在这里插入图片描述

3.比较检验

假设检验:
假设泛化错误率为 的学习器在一个样本上犯错的概率是 ε;那么意味着在 m 个测试样本中恰有 (1-ε)×m 个被误分类.由此可估算出其恰将 (1-ε)×m 个样本误分类的概率如下式所示,这也表达了在包含m个样本的测试集上,泛化错误率为ε的学习器被测得测试错误率为(1-ε)的概率:
在这里插入图片描述
二项检验:
在这里插入图片描述我们可使用"二项检验"来对泛化错误率是否不大于 0.3这样的假设进行检验.在(1-a)的概率内所能观测到的最大错误率如下式计算。这里的(1-a)反映了结论的置信度,说的明白一点就是图2.6中不是黑色的那一部分。
在这里插入图片描述
这里就是运用到了我们概率论所学的知识,在a的显著度下,假设"ε <= εo" 不能被拒绝,即能以 1- a 的置信度认为,学习器的泛化错误率不大于 εo; 否则该假设可被拒绝,即在 a 的显著度下可认为学习器的泛化错误率大于 εo. 如果不清楚可以去补一下概率论的假设检验。

然而我在检验中往往不会只检验一次,通常我们都需要进行多次的训练和学习,这样我们就会得到多个测试结果,这时我们就可以使用 “t 检验” 了。

t 检验:
在这里插入图片描述对假设 μ = εo 和显著度 a ,若平均错误率 u 与 εo 之差的绝对值位于临界值范围[t -a/2 , t a/2]内,则不能拒绝 μ = εo。下表中给了一些常用的临界值:
在这里插入图片描述

前面讲到的几个检验都是在一个数据集上比较两个算法的性能,下面我们介绍几个在一个数据集上比较多个算法性能的检验:

Friedman检验:
假定我们用 D1,D2,D3,D4 四个数据集对算法 A ,B,C 进行比较.首先,使用留出法或交叉验证法得到每个算法在每个数据集仁的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值 1,2, …,若算法的测试性能相同,则平分序值.例如,在D1, D3 上,A 最好、B 其次、C 最差,而在 D2上A最好、B、C 性能相同,……,则可列出表 2.5 ,其中最后一行通过对每一列的序值求平均,得到平均序值.
在这里插入图片描述

然后,使用Friedman 检验来判断这些算法是否性能都相同.若相同,则它们的平均序值应当相同.假定我们在 N个数据集上比较 k 个算法,令 ri 表示第 i个算法的平均序值,为简化讨论,暂不考虑平分序值的情况,则 ri 服从正态分布,其均值和方差分别为 (k + 1)/2 和 (k * k - 1)/12. 变量在这里插入图片描述下面给了一些常用的临界值:
在这里插入图片描述
我们还有后续检验来进一步区分算法:

nemenyi检验:
在这里插入图片描述

4.偏差与方差

以回归任务为例,学习算法的期望预
在这里插入图片描述经过公式推导,我们可以知道泛化误差可以分解为偏差、方差与噪声之和。


总结

经过第二章的学习,我学习到了如何去衡量一个算法的性能和不同算法的性能之间的不同,对于学习器的泛化误差的评估方法有留出法,交叉验证法还有自助法,对于性能度量,我们针对不同的考察内容的不同有许多度量来使用,例如查准率,查全率,F1等等。我们可以评估算法的性能之后,我们需要比较这些算法之间的性能不同,我们可以使用假设检验,交叉验证 t 检验,McNemar 检验, Friedman 检验与 nenyl 后续检验等。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>