本章是西瓜书的第二章,周志华老师在这一部分基础对机器学习中的基础知识进行介绍,主要阐述了误差、过拟合的相关概念和模型的评估度量方法。
博主在今年元旦之后就要正式开始做毕业设计了,所以我会努力在今年元旦假期结束之前把西瓜书的所有内容更新。也希望大家可以监督我嘻嘻。
一、经验误差与过拟合
- 错误率: 分类错误的样本数占样本总数的比例称为“错误率”,即如果我们在mmm个样本中有aaa个样本分类错误,则错误率为 E=amE=\frac{a}{m}E=ma。
- 精度: 与错误率相对应,分类正确的样本数占样本总数的比例就是精度,即精度=1-错误率。
- 误差: 学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为”泛化误差“。我们希望得到的学习器具有的泛化误差越小越好,但是我们事先并不知道新样本是什么样,实际能做的是努力使经验误差最小化。
- 过拟合: 学习器把训练样本自身的一些特点也当做潜在样本都会具有的一般性质,导致泛化性能下降。过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施,但是过拟合并不能彻底避免,我们只能对其进行“缓解”。
- 欠拟合: 对训练样本的一般性质尚未学习好。我们可以通过下图对过拟合和欠拟合进行直观的理解。

二、评估方法
我们无法直接获得泛化误差从而对学习器进行评估,而训练误差又由于有过拟合现象的存在不适合作为标准。为了对模型进行评估,我们需要用一个测试集来测试学习器对新样本的判别能力,用测试集上的测试误差来作为泛化误差的近似。
测试样本是从样本中独立同分布采样而得,我们希望取得的测试集要尽可能的和训练集互斥,即测试集尽量不在训练集中出现,未在训练过程使用过。
这一部分内容主要就是介绍了几种可以用来将测试集与训练集进行分离的方法。
2.1 留出法
“留出法”(hold-out)直接把数据集D划分成两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D=S∪T,S∩T=∅,在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
这里有几点需要我们特别注意:
- 训练/测试集的划分要尽可能保持数据分布的一致性,避免因为数据划分的过程中引入额外的误差而对最终的结果产生影响。从采样的角度来看待数据集的划分过程, 我们可以用“分层采样”来保留原先的分类比例。
- 在给定训练/测试集的样本比例后,我们依旧存在很多种划分方式对初始数据集进行分割,不同的划分方式会产生不同的训练/测试集,模型评估的结果也将有所不同,所以单次划分的结果并不可靠,我们在使用留出法时一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
- 如何确定训练集和测试集的数目是留出法中的一堆矛盾关系,一般在实际使用过程中我们将23—45\frac{2}{3}—\frac{4}{5}32—54的样本用于训练,剩余的用于测试。
2.2 交叉验证法
交叉验证法(cross validation):先将数据集DDD分为kkk个大小相似的互斥子集,即D=D1∪D2∪……∪DkD=D_{1}∪D_{2}∪……∪D_{k}D=D1∪D2∪……∪Dk,D_{i}∩D_{j}=空集(i≠ji≠ji̸=j)。每次用k−1k-1k−1个子集的并集作为训练集,余下的子集作为测试集;获得kkk组训练/测试集,从而可进行kkk次训练和测试,最终返回的是这kkk个测试结果的均值。
-
交叉验证法的评估结果的稳定性和保真性取决于kkk的值,所以交叉验证法又称为示“kkk折交叉验证法”,kkk的最常用值为10,下图就是一个10折交叉验证的示意图。

-
为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,评估结果是这p次k折交叉验证结果的均值,常见的是10次10折交叉验证。
-
当数据集的样本数和kkk值相同时,此时我们就得到了交叉验证法的一个特例:留一法,留一法不受随机样本的影响,评估结果一般来说较为准确。
2.3 自助法
在上文中我们介绍了留出法和交叉验证法这两种方法,我们希望评估的是用整个D训练出的模型,但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。
自助法: 给定包含mmm个样本的数据集DDD,每次随机从DDD 中挑选一个样本,将其拷贝放入D’D’D’,然后再将该样本放回初始数据集DDD中,使得该样本在下次采样时仍有可能被采到。重复执行mmm次,就可以得到包含mmm个样本的数据集D’D’D’。可以得知在mmm次采样中,样本始终不被采到的概率取极限为:

通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D’中,于是可以将D’作为训练集,D\D’作为测试集。
用这种方法,实际评估的模型与期望评估的模型都是使用mmm个训练样本,我们任然有数据总量约为13\frac{1}{3}31的,没在训练集中出现的样本用于测试,这样的测试结果,也被称为“包外估计”。
自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。
调参(parameter tuning):大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别。
学习算法的很多参数是在实数范围内取值,因此,对每种参数取值都训练出模型来是不可行的。常用的做法是:对每个参数选定一个范围和步长λ,这样使得学习的过程变得可行。
最后需要注意的是:当选定好模型和调参完成后,我们需要使用初始的数据集D重新训练模型,即让最初划分出来用于评估的测试集也被模型学习,增强模型的学习效果。
2.4 调参与最终模型
大多数学习算法都有参数需要设定,参数配置不同,学的模型的性能往往会有显著性差异。
- 我们在调整参数的过程中需要计算开销和性能估计之间进行折中。
- 在模型选择完成后,学习参数和参数配置已经选定,此时我们应该用数据集D重新训练模型,这个模型在训练过程中使用了所有的mmm个样本,这才是我们最终递交给用户进行使用的模型。
- 我们通常把学的的模型在实际使用中遇到的数据称为测试数据,为加以区分,模型评估与选择中用于评估测试的数据集称为验证集。在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用中的泛化能力,而把训练数据另外划分为训练集和验证集们,基于验证集上的性能来进行模型选择和调参。
三 、性能度量
性能度量是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。
在回归任务中,最常用的性能度量是:“均方误差”(mean squared error)。预测任务中,给定样例集D=(x1,y1),(x2,y2),…,(xm,ym)D={(x_{1},y_{1}),(x_{2},y_{2}),…,(x_{m},y_{m})}D=(x1,y1),(x2,y2),…,(xm,ym),其中yiy_{i}yi是对示例xix_{i}xi的真实标记,要评估学习器f的性能,就要把学习器预测结果f(x)f(x)f(x)与真实标记yyy进行比较。
在回归任务中,我们最常使用的度量性能是“均方误差”(mean sqared error)

更一般的,对于数据分布DDD和概率密度p(.)p(.)p(.),均方误差(mean square error)可描述为:

3.1 错误率和精度
错误率和精度是最常用在分类任务(离散)中的两种性能度量方法,既适用于二分类任务,也适用于多分类任务。
- 错误率: 分类错误的样本数占样本总数的比例。对于样例DDD,错误率定义为:

- 精度: 分类正确的样本数占样本总数的比例。对于样例DDD,精度定义为:

显然,精度与错误率之和为1。
当我们知道数据分布和概率密度函数p(`)之后,我们可以对错误率和精度定义如下:

3.2 查准率与查全率
查准率: 衡量某一检索系统的信号噪声比的一种指标,即检出的相关文献量与检出的文献总量的百分比。普遍表示为:查准率=(检索出的相关信息量/检索出的信息总量)x100%。
查全率(召回率): 衡量某一检索系统从文献集合中检出相关文献成功度的一项指标,即检出的相关文献量与检索系统中相关文献总量的百分比。普遍表示为:查全率=(检索出的相关信息量/系统中的相关信息总量)x100%。使用泛指性较强的检索语言(如上位类、上位主题词)能提高查全率,但查准率下降。
两者的详细定义可以借助于分类结果混淆矩阵:

根据上表,查准率P和查全率R可以分别定义为:

查准率和查全率是一堆矛盾的度量,一般来说,查准率越高,查全率往往偏低;查全率高时,查准率往往偏低。
根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,以查准率为纵轴,查全率为横轴作图。我们就可以得到查准率和查全率曲线,简称为“P-R曲线”。如下图所示:

西瓜书在接下来的部分主要是讲述了如何根据“P—R曲线”对学习器的优劣进行比较。主要有如下几种方法:
-
根据P-R曲线与坐标轴构成的面积
-
根据P-R曲线画出的平衡点(BEP)
-
F1F_{1}F1度量:

-
在实际使用中,不同场合下我们对查全率和查重率的重视程度不同,所以我们提出了更为一般的FβF_{\beta }Fβ:

β{\beta }β度量了查全率对查准率的相对重要性。 -
当有多个二分类混淆矩阵时,例如:多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,算出Fβ或F1:

微观则是先将各混淆矩阵的对应元素进行平均,计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出FβF_{\beta }Fβ或F1F_{1}F1。


3.3 ROC 与AUC
很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阔值(threshold)进行比较,若大于阈值则分为正类,否则为反类。实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,"最可能"是正例的排在最前面,“最不可能"是正例的排在最后面.这样,分类过程就相当于在这个排序中以某个"截断点” (cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例。
ROC 曲线则是从查准率和查全率的重要性这个角度出发来研究学习器泛化性能的有力工具。
我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图’就得到了"ROC 曲线与P-R 曲线使用查准率、查全率为纵、横轴不同, ROC 曲线的纵轴是"真正例率" (True Positive Rate,简称TPR) ,横轴是"假正例率" (False PositiveRate,简称FPR) 。
两者分别定义为:

我们可以得到ROC和AUC图像如下:

上图中的对角线对应于"随机猜测" 模型,而点(0,1)(0,1)(0,1) 则对应于将所有正例排在所有反例之前的"理想模型".
我们可以用ROC 曲线下的面积,即AUC (Area Under ROC Curve)对学习器的性能进行比较。假定ROC 曲线是由坐标为(x1,y1),(x2,y2)(x_{1} , y_{1}), (x_{2}, y_{2})(x1,y1),(x2,y2) , . . . , (xm,ym)(x_{m}, y_{m})(xm,ym) 的点按序连接而形成(x1=0,xm=1)(x_{1} =0, x_{m} = 1)(x1=0,xm=1),则AUC为:

AUC 考虑的是样本预测的排序质量,因此它与排序误差有紧密联系.给定m+m^{+}m+个正例和m−m^{-}m− 个反例?令D+D^{+}D+和D−D^{-}D−分别表示正、反例集合,则排序"损失" (loss) 定义为:

即考虑每一对正、反例,若正例的预测值小于反例,则记一个"罚分"则相等则记0.5 个"罚分"。容易看出, lrαnkl_{rαnk}lrαnk 对应的是ROC 曲线之上的面积:若一个正例在ROC 曲线上对应标记点的坐标为(x,y)(x,y)(x,y) , 则xxx 恰是排序在其之前的反例所占的比例,即假正例率.因此有;

3.4 代价敏感错误率与代价曲线
在实际生活中,不同的误差对应的代价不同,在这里,我们引入代价矩阵:

我们把上表中的第0 类作为正类、第1 类作为反类?令D+与D−D_{+} 与D_{-}D+与D−分别代表样例集D 的正例子集和反例子集,则"代价敏感" (cost-sensitive)错误率为:

在非均等情况下,我们代价曲线来衡量学习器的期望总体评价。横坐标为取值为[0,1][0 ,1][0,1]的正例概率代价

其中p 是样例为正例的概率;纵轴是取值为[0,1] 的归一化代价:

FPR 是假正例率,FNR=1−TPRFNR = 1 - TPRFNR=1−TPR 是假反例率.

四、比较检验
本部分主要介绍两种最基本的假设检验,然后介绍几种常用的机器学习性能比较方法。
现实任务中我们并不知道学习器的泛化错误率,只能获知其测试错误率。两者存在一些不同,但我们可根据测试错误率估推出泛化错误率的分布。
- 假设检验
- 交叉验证t 检验
- McNemar 检验
- Friedman 检验与 Nemenyi 后续检验
五、偏差与方差
“偏差方差分解” (bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。
对测试样本队令yDy_{D}yD 为mmm 在数据集中的标记, yyy 为xxx 的真实标记, f(x;D)f(x; D)f(x;D) 为训练集DDD 上学得模型fff 在xxx 上的预测输出。
我们可对算法的期望泛化误差进行分解如下:

从而得到:

泛化误差可分解为偏差、方差与噪声之和。
一般来说,偏差与方差是有冲突的,这称为偏差一方差窘境。

本文深入解析了机器学习中的误差、过拟合概念,介绍了经验误差与泛化误差的区别,探讨了评估方法如留出法、交叉验证法及自助法,并详细解释了性能度量指标如错误率、精度、查准率、查全率、ROC曲线、AUC等,为读者提供了全面的模型评估指南。
1289

被折叠的 条评论
为什么被折叠?



