第2章 模型评估与选择

2.1 经验误差与过拟合

“错误率”:分类错误的样本数占样本总数的比例称为"错误率" (error rate)。即如果在m个样本中有a个样本分类错误,则错误率 E=a/m。
“精度”:1-a/m 称为“精度”,即“精度=1-错误率”。
学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差” (training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差” (generalization error)。
我们希望得到泛化误差小的学习器。实际能做的是努力使经验误差最小化,实际希望的是在新样本上能表现得很好的学习器。为达到这一目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。
“过拟合”:当学习器把训练样本学得“太好了”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降这种现象在机器学习中称为“过拟合”(overfitting)。与之相对的是**“欠拟合”**(underfitting),这是指对训练样本的一般性质尚未学好。
“过拟合”:由于学习能力过于强大,不可避免,只能缓解。
“欠拟合”:由于学习能力低下,比较容易克服,加大学习,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等。
现实中,往往有多种学习算法可供选择,甚至同一算法不同参数配置时,也会产生不同模型。如何选择,即“模型选择”。
理想解决方案是对候选模型泛化误差进行评估,然后选择泛化误差最小的模型。

2.2 评估方法

通过“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为“泛化误差”的近似。
测试样本:1. 从样本真实分布中独立同分布采样
                   2. 测试集与训练集尽可能互斥(未在训练集中出现,未使用过)
原因举例:老师出10道题目供学生练习,考试时不能把这10道题作为试题,因为是想体现学生“举一反三”的能力。
但是我们只有一个包含m个样例的数据集,数据集如下图所示:


怎么做到既要训练,又要测试?
答案是:对数据集D进行适当处理,产生训练集S和测试集T。

2.2.1 留出法

留出法”直接将数据集D划分为两个互斥集合,一个训练集S,一个测试集T。即:

举例:D=1000个,训练集S=700个,测试T=300个。用S进行训练后,在T上进行测试中有90个出错,错误率为90/300 * 100%=30% ,精度为1-30%=70%。
注意:训练/测试集划分要尽可能的与数据分布一致,避免因数据划分引入额外偏差对结果产生影响。
从采样(sampling)的角度看待数据集的划分,保留类别比例的采样方式称为“分层采样”。
如:若D=1000个=500正+500反
         则S=700个=350正+350反,T=300个=150正+150反
另一个需要注意的是:即便给定训练测试/训练集的样本比例,仍存在多种划分方式对初始数据集D进行划分。
如:在上面例子中,可以先将D中样本排序,然后把前350个正例放在S中,也可以把最后350个正例放在S中……,这些不同的划分将导致不同的S/T,相应的模型评估也会影响。
因此,单次使用留出法得到的估计结果不够稳定可靠,使用留出法时,一般采用若干次随机划分、重复实验评估后取平均值
如:进行100次随机划分,每次产生一个S/T用于实验评估,100次后就得到100个结果,留出法返回的就是这100个结果的平均。
留出法会导致一个窘境:若S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但是由于T较小,导致评估结果不够稳定准确;若T多包含一些样本,则S与D差别变大,用S训练出的模型与用D训练出的模型可能有较大的差别,降低评估结果的保真性(fidelity)。
该问题没有完美解决方案,常见做法:2/3~4/5的 样本用于训练,剩余用于测试。

2.2.2 交叉验证法

交叉验证法”将D划分为k个大小相似的互斥子集,每个子集 都尽可能与数据分布保持一致,即“分层采样”。即:

过程:每次用k-1个子集的并集作为训练集,余下子集为测试集,最终返回k个测试结果的均值。
显然,交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值,所以又称“k折交叉验证”(k-fold cross validation),k通常取10,称为10折交叉验证,示意图如下:

与留出法类似,将数据集D划分为k个子集同样存在多种划分方式,为减少因样本划分不同而引入的差别,通常要随机使用不同划分重复p次,最终结果是p次k折交叉验证结果的均值。如常见的“10次10折交叉验证”。
特例:留一法
解释:数据集D中包含m个样本,令k=m,则每次只留一个样本测试,所以留一法不受随机随机样本划分的影响。
评价:通常认为留一法的评估结果比较准确(不全是,“没有免费的午餐”定理同样适用)。缺陷是数据量较大时,计算量太大。

2.2.3 自助法

留出法和交叉验证法中,由于保留一部分样本用于测试,因此实际评估的模型的所使用的训练集比D小,必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度太高。因此,需要寻找办法可以减少训练样本规模不同造成的影响,同时高效的进行实验估计。
自助法”(bootstrapping)是一个比较好的解决方案,以自助采样法为基础,给定包含m个样本的数据集D。
采样数据集D’ :每次从D中随机选一个样本放入D’中,然后放回,使得该样本喜爱次采样也可能被采到;重复m次,得到包含m个样本的数据集D’(D中有一部分在D’中重复出现,有一部分从未出现)
样本在m次采样中始终不被采到的概率为:

取极限得:

数据集D中大约有36.8%的样本未出现在训练集D’中, D\ D’用作测试集。实际评估的模型与期望评估的模型都使用了都使用了m个训练样本,而我们仍有数据总量约1/3的,没在数据集中出现的样本用于测试。这样的结果又称“包外估计”(out-of-bag estimate)
使用场合:数据集小、难以有效划分训练/测试集(S/T);此外,能产生多个不同的S,对集成学习有益
然而,自助法产生的数据集改变了原始分布,会引入估计偏差;
因此,在数据量充足时,留出法、交叉验证法更常用。

2.2.4 调参与最终模型

“参数调节”或“调参”:算法都有些参数需要设定,参数配置不同,模型性能不同。
调参与算法选择本质上是一致的:不同配置得到不同模型,把对应最好的模型参数作为结果。
实际操作中,参数选定是一个范围加一个变化步长
如:[0,0.2]以0.05为步长,有0,0.05,0.1,0.15,0.2这5种参数选择,这已经是计算开销和性能估计之间的折中结果,折中才让学习过程变得可行,但是仍然困难:假定算法有3个参数,每个参数5种选择,模型将有53=125种需要对比。所以参数多的话,会导致极大的调参工程量。
最终模型学习流程:

2.3 性能度量

作用:用来衡量模型泛化能力的评价标准。
性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,模型好坏不仅取决于算法和数据,还决定于任务需求
预测任务中,给定样例集:

其中yi是示例xi的真实标记。要评估学习器f的性能,就要把预测结果f(x)与真实情况y比较。
回归任务最常用的性能度量是“均方误差”(mean squared error):

更一般的,对于数据分布D和概率密度函数p(.) ,均方误差为:

分类任务中常用的性能度量有:错误率与精度,查准率、查全率与F1,ROC与AUC, 代价敏感错误率与代价曲线

2.3.1 错误率与精度

分类任务中最常用的两种性能度量:错误率与精度。既适用于二分类,也适用于多分类。
错误率:分类错误的样本占样本总数的比例
精度:分类正确的样本占样本总数的比例
对样例集D, 分类错误率定义为:

精度定义为:

更一般的表示方法:对于数据分布D, 概率密度p(.):
错误率:

精度:

2.3.2 查准率、查全率与F1

错误率和精度虽常用,但不能满足所有任务需求。例如:信息检索中我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”,“用户感兴趣的信息中有多少被检索出来了”。“查准率”(precision)与“查全率”(recall)是更为适用于此类需求的性能度量。
二分类问题,根据真实类别与学习器预测类别的组合分为:

四种情形,其中TP+FP+TN+FN=样例总数
分类结果构成“混淆矩阵”:


(准不准,竖相加;全不全,横相加)

查准率与查全率是一对矛盾的度量。一般而言,查准率高,查全率低;查准率低,查全率高。通常只有在一些简单任务中,才能使查准率,查全率都很高。
在很多情况下,根据预测结果对样例排序,排在前面的“最可能”是正例的样本,排在后面是“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,计算当前的P,R值,得到“P-R曲线”,称为“P-R图”:

若一个学习器的P-R曲线被另一个完全“包住”,则可断言后者优于前者,如上图A>C, 而A, B不能随意下定论,只能具体情况具体分析。
若将学习器A和B比出个高低,比较合理的方法是对比曲线下面积大小,一定程度上表征学习器在查准率和查全率取得相对“双高”的比例。但是不好估算,于是人们设计了三个性能度量综合考虑查准率和查全率。
1.“平衡点”(Break-Even Point,BEP):“查准率=查全率”时的取值,如上图学习器C的BEP是0.64,基于BEP比较,认为A优于B。但BEP过于简化,更常用的是F1度量。
2. F1度量

由于在一些情况下,对查准率和查全率的重视程度不同。如:商品推荐系统中,为了尽可能的少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯检索系统中,更希望少漏掉逃犯,此时查全率更重要。F1度量的一般形式——Fβ 。能让我们表达出对查准率/查全率的不同偏好。
3. F1度量的一般形式—— Fβ:

其中, β>0度量了查全率对查准率的相对重要性;
β =1,退化为标准的F1度量;
β >1,查全率更重要;
β <1,查准率更重要。
很多时候有多个二分类混淆矩阵(如进行多次训练/测试;在多个数据集上进行测试;执行多分类任务,每两两类别的组合都对应一个混淆矩阵…)。总之,我们希望在n个二分类混淆矩阵上综合考虑查准率、查全率。有以下做法:

  1. 最直接的做法,分别计算各混淆矩阵上的R和P,记 (P1,R1),(P2,R2)…(Pn,Rn),求平均值,这样得到:
    “宏查准率”(macro-P):

    “宏查全率”(macro-R):

    “宏F1”(macro-F1):
  2. 还可以将各混淆矩阵对应元素平均,得到TP, FP, TN, FN的平均值,分别记为 , , , ,再基于这些平均值计算:
    “微查准率”(micro-P):

    “微查全率”(micro-R):

    “微F1”:

2.3.3 ROC与AUG

ROC:Receiver Operating Characteristic (受试者工作特征)
AUG:Area Under ROC Curve (ROC曲线下面积)
很多学习器是为测试样本产生一个实值或概率预测,将其与分类阈值(threshold)作比较,大于阈值为正类,小于阈值为反类。(如神经网络一般情形下是对每个样本预测出一个[0.0, 1.0]之间的实值,然后将这个实值与0.5比较,大于为正例,小于为反例)。
所以,可将测试样本依据实值或概率排序,“最可能”是正例排最前,“最不可能”是正例排最后。最后,分类过程相当于在这个排序中的某个截断点(cut point)将样本分为两部分。
不同任务,设定不同截断点。若更注重“查准率”,选排序靠前;若更注重“查全率”,选排序靠后。
ROC曲线绘制:根据学习器预测结果对样例进行排序,按此顺序逐个把样本作为正例预测,每次计算两个值:
纵轴:“真正例率”(True Positive Rate, TPR):

横轴:“假正例率”(False Positive Rate, FPR):

ROC曲线与AUG示意图:

显然,对角线对应“随机猜测”模型而点(0,1)对应所有正例排在所有反例之前的理想模型
绘图过程:给定个m+正例,m-个反例,首先根据预测排序,然后将分类阈值设为最大(即把所有样例均预测为反例),得到(0,0)点;
其次,将分类阈值依次设为每个样例预测值,依次将每个样例划分为正例。设前一个标记点坐标为(x,y) ,
当前若为真正例,坐标为 (x,y+1/m+)
当前若为假正例,坐标为 (x+1/m-,y)
然后用线段连接相邻点即得。
ROC曲线通俗理解(含MATLAB代码):来自博客https://blog.csdn.net/Green2_0/article/details/83744119

其中class一栏表示真实值,p为正例,n为反例,这20个样本中有10个正例10个反例;score一栏则是分类器给出的分类评分。一般的二分类的实现方法就是选择一个阈值,将大于这个阈值的样本认为是正例,小于这个阈值的样本认为是反例。于是,不妨对 样本4来看,如果将样本4的评分设置为分类阈值,被分类器为正例的样本有1 2 3 4,其中真正的正例样本有1 2 4,故其TPR=3/10=0.3,FPR=1/10=0.1(分母虽然数值一样但是意义不同,前面TPR的分母是样本总体中的真正例个数,后者是样本总体中的真反例个数)。接着不妨设置样本9的评分0.51作为阈值,那么样本1~9都会被分类器认为是正例样本,其中为真正例的有1 2 4 5 6 9共6个,所以TPR=6/10=0.6,FPR=3/10=0.3.如此这样,将1~20每个样本的评分均作为分类器的判定阈值,可以得到20组TPR和FPR的有序数对;然后不妨以TPR和FPR为两个坐标轴建立一个直角坐标系,就可以得到这样的图像:

这样每一组图像在图中都会有一个坐标,可以连成一条折线。一般地我们希望分类器得到的分类结果是完全正确的,也就是正例样本全部都能够被检测出来,并且不会混入真反例样本,这个时候TPR->1且FPR->0,反应在图像上好的分类器的折线应该更加接近左上角。当样本足够多时,折线就近似为圆滑的曲线,类似于这个样子:

从这个图上看,分类器A的结果肯定比分类器B要好。这个就是AOC曲线以及它的含义。
END
END
学习器比较时,若一个包住另一个,则可说前者优于后者;若有交叉,则分情况,比较合理的判断是比较ROC曲线下面积,即AUC:

形式化地看,AUC考虑的是样本预测的排序质量,与排序误差有紧密联系。排序“损失”(loss)定义为:

容易看出,上式对应的是ROC曲线之上的面积,因此有:

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

现实中,不同类型错误所造成后果不同。比如:看病如果误诊,门禁如果放进坏人等。为权衡不同类型错误所造成的的不同损失,可将错误赋予“非均等代价”(unequal cost)。
以二分类问题为例,设定一个“代价矩阵”(cost matrix):


前面介绍的性能度量大都隐含了均等代价(如错误率的计算没有考虑错误后果)。在非均等代价下,我们希望总体最小化“总体代价”(total cost)。
若将上表第0类作为正类,第1类作为反类, 和 代表样例集D中的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为:

非均等代价下,ROC曲线不能直接反映学习器的期望总体代价,而“代价曲线”(cost curve)则可达到目的。代价曲线图:
横轴是取值为[0,1]正例概率代价(其中p是样例为正例的概率):

纵轴是取值为[0,1]的归一化代价(其中FPR是假正例率,FNR=1-TPR是假反例率):

代价曲线绘制过程:
(1) ROC曲线上的每一点对应了代价平面上的一条线段;
(2) 设ROC曲线上点坐标为(FRP,TPR),可计算出FNR
(3) 在代价平面上绘制一条从(0,FRP)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;
(4) 如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为所有条件下学习器的期望总体代价。(后续补充https://www.zhihu.com/question/63492375)
如图2.5:

2.4 比较检验

有了试验评估方法和性能度量,看起来就能对学习器的性能进行评估比较了:先使用某种试验评估方法测得学习器某个性能度量结果,然后对这些结果进行比较
问题:怎么进行比较?为什么机器学习中性能非常复杂?两个学习器不能直接比较吗?
第一,我们希望比较的是泛化性能,然而实验评估获得的是测试集性能,两者对比结果未必相同;
第二,测试集上的性能与测试集本身选择有很大关系,测试集大小,或测试集大小一致但样例选择不同也会导致不同结果;
第三,很多算法本身有一定的随机性,即使相同参数设置在同一个测试集多次运行,结果可能有所不同。
统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。(以下默认以错误率为性能度量)

2.4.1 假设检验

假设检验逻辑四步
(1) 零假设:小明偷吃苹果
      备选假设:小明没吃苹果
(2) 证据:在零假设前提下计算的概率P
(3) 判断标准:概率<α显著水平
(4) 如果P<=α,拒绝零假设,备选假设成立;P>α,零假设成立
假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,过程:


理论过程:

参考资料:

《机器学习》 作者: 周志华
机器学习手推笔记 https://github.com/Sophia-11/Machine-Learning-Notes

写给自己

天行健,君子以自强不息。

机器学习(周志华)知识点总结——第2章 模型评估与选择(后期上传word/PDF)相关推荐

  1. 小吴的《机器学习 周志华》学习笔记 第二章 模型评估与选择

    小吴的<机器学习 周志华>学习笔记 第二章 模型评估与选择 上一周我们介绍了第一章的基础概念,这一次将带来第二章的前三节.后面的2.4 比较检验与2.5 偏差与方差,涉及概率论与数理统计概 ...

  2. 小吴的《机器学习 周志华》学习笔记 第一章 绪论

    小吴的<机器学习 周志华>学习笔记 第一章 绪论 近一年时间接触到不少机器学习的知识,虽然断断续续学了一些,总感觉还没有入门(只学会了疯狂调包).因此,最近开始系统学习Machine Le ...

  3. 小吴的《机器学习 周志华》学习笔记 第二章 2.4 比较检验、2.5 偏差与方差

    小吴的<机器学习 周志华>学习笔记 第二章 2.4 比较检验. 2.5 偏差与方差 2.4 比较检验 上一周提到了实验的评价方法和性能量度,步骤简单可以看成:先使用某种实验评估方法测得学习 ...

  4. 机器学习【西瓜书/南瓜书】--- 第2章模型评估与选择(上)(学习笔记+公式推导)

    目录 前言 2.1 经验误差与过拟合 2.2 评估方法 2.2.1 留出法(hode−outhode-outhode−out) 2.2.2 交叉验证法(crossvalidationcross val ...

  5. 机器学习 周志华 西瓜书 第1章 绪论复习总结

    如果有看不清或其他问题请评论反馈.

  6. 机器学习(周志华) 参考答案 第十四章 概率图模型 14.9

    机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52064910 机器学习(周志华) 参考答案 第十四章 ...

  7. 机器学习 周志华 第一章课后习题

    机器学习 周志华 第一章课后习题 1.1 1.2 1.3 1.4 1.5 1.1 在下面这张图片中若只包含编号为1和4的两个样例,试给出相应的版本空间. 书上实例: 1.表 1.1 对应的假设空间如下 ...

  8. 【读书笔记】周志华 机器学习 第二章 模型评估和选择

    第二章 模型评估和选择 1 欠拟合和过拟合 偏差和方差 1.1 欠拟合和过拟合 1.2 偏差和方差 2 评估方法 性能度量 2.1 评估方法 2.1.1 留出法 2.2.2 交叉验证法 2.2.3 自 ...

  9. 《机器学习》周志华课后习题答案——第一章(1-3题完结)

    <机器学习>周志华课后习题答案--第一章 文章目录 <机器学习>周志华课后习题答案--第一章 一.表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间 二.与使用单个 ...

  10. 《机器学习》周志华 第二章——模型评估与选择笔记

    <机器学习>周志华 第二章--模型评估与选择 过拟合和欠拟合 过拟合:对训练数据拟合过当的情况,训练集表现很好,测试集表现差. 欠拟合:模型在训练和预测时都表现不好. 降低过拟合的方法: ...

最新文章

  1. (九)javaScript的基本使用
  2. 网络营销外包专员浅析响应式网站建设应注意哪些网络营销外包细节
  3. ElementUI 添加修改提示成功后 如何刷新表格数据展示
  4. linux代码环境配置,linux下配置环境变量【原创】(示例代码)
  5. 中国电子用LCP树脂市场未来发展展望及十四五规划咨询建议报告2022-2028年版
  6. Python也有做大型游戏的潜力?原来我们小看了Python,无所不能!!
  7. 【pwnable.tw】 death_note
  8. os.environ[‘CUDA_VISIBLE_DEVICES‘]= ‘0‘设置环境变量
  9. mybatis mysql 中文乱码_mybatis连接mysql数据库插入中文乱码
  10. 番茄花园GHOST SP3无法安装IIS 信息服务的解决方法
  11. 申请苹果开发者帐号傻瓜式教程
  12. keil中设置的flash(irom)的起始地址为0x08000000,这个0x08000000的意义------stm32地址映射图解析
  13. 计算机只能在安全模式下起动,电脑不能进入正常的XP系统,只能在安全模式下启动?...
  14. 基于达索系统3DE平台实现企业数字化转型的场景应用
  15. 获取股票历史数据(2)——数据保存/数据可视化
  16. mysql中IFNULL,NULLIF,ISNULL函数的对比
  17. schedule定时任务
  18. AUTOCAD——检验标注
  19. gem意思_gem是什么意思中文翻译
  20. 更新和卸载 oh-my-zsh

热门文章

  1. java 中文乱码转换_java中文乱码怎么转换
  2. 论文阅读 || 语义分割系列 —— deeplabv1 详解
  3. 《Java就业培训教程》_张孝祥_书内源码_09
  4. 网络-无线中继(HG255d挂载8187)
  5. xp 计算机桌面图标不见,萝卜XP系统桌面图标全部消失了如何解决
  6. windows开启远程桌面命令
  7. bing翻译api php,PHP调用必应翻译API示例源码
  8. Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
  9. 高德地图 API 搜索服务 搜索定位 用不了
  10. 天翼校园客户端没有linux版本,Linux下突破校园天翼宽带客户端限制(已移植OpenWRT)...