本系列文章仅为个人学习周志华老师西瓜书和吴恩达老师深度学习课程的学习笔记,不做任何商业传播用途!若发现有雷同,不是巧合。 csdn的编辑器真的很难用。。
目录
一、经验误差与过拟合
一些术语:错误率、精度、误差—训练误差/经验误差(训练集)、泛化误差(测试集)
- 过拟合(overfitting):学习器把训练样本学得太好,可能已经把训练样本自身的特点当作潜在样本都具有的一般性质——学习能力过于强大——无法彻底避免,只能缓解,或减小风险。否则意味着通过经验误差最小化就能获得最优解,构造性地证明了“P=NP”
- 欠拟合(underfitting):对训练样本的一般性质尚未学好——学习能力低下
- →举例:树叶识别【过拟合学到训练集树叶锯齿特征,欠拟合只学到绿色的特征】
在研究对比不同算法的泛化性能时,用测试集上的判别结果估计模型的泛化能力,再把训练集的数据划分为训练集和验证集,基于验证集上的性能进行模型选择和调参。选择算法和参数后,应该用数据集D重新训练模型。
💡 N=P问题?
- P类问题是可以找到一个能在多项式时间内解决它的算法;
- NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。
在 2000 年克雷数学研究所公布的千禧年七大数学难题中,P 和 NP 问题排在了第一位。人们普遍认为,P=NP不成立,也就是说,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。
《天才基本法》中的“P=NP”问题,到底是个什么问题?
https://zhuanlan.zhihu.com/p/550693689
模型选择的三个关键问题:
如何获得测试结果→评估方法
如何评估性能优劣→性能度量
如何判断实质差别→比较检验
二、评估方法
理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的模型。但我们无法直接获得泛化误差,可以通过实验测试对学习器的泛化误差进行评估进而选择——使用一个测试集测试学习器对新样本的判别性能,以测试集上的测试误差作为泛化误差的近似。注意测试集选择标准:①独立同分布采样;②测试集尽可能与训练集互斥。
(一)训练集S和测试集T的产生方法
- 留出法(hold-out):直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个集合作为测试集T。
- 采样时至少保持样本的比例类似
- 若将样本排序后再选择也会导致估计结果不可靠→采用若干次随机划分、重复进行实验评估后取平均值
- 常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试
- 交叉验证法(cross validation)/k折交叉验证(k-fold cross validation):先将数据集D划分为k个大小相似的互斥子集,每个子集尽可能保持数据分布的一致性。每次用k-1个子集的并集作为训练集,剩余的一个子集作为测试集。最后返回k个测试结果的均值。
- 常用取值为10(10折交叉验证),还有5、20等
- 为了减小因为样本划分不同导致的差别,通常要随机使用不同的划分p次,最终结果为p次k折交叉验证的均值
- 留一法(Leave-One-Out, LOO):k=数据集样本数,不受随机样本划分方式的影响,被实际评估的模型和期望评估的使用D训练出的模型很相似
- 数据集比较大时计算开销很大
- 自助法(bootstrapping)/包外估计(out-of-bag estimate):训练集由于训练规模不同可能导致模型性能估计产生偏差。对包含m个样本的数据集D采样得到D‘:每次随机从D中取出一个样本,拷贝到数据集D’,并放回到原始数据集,下次采样仍有可能被采到,重复m次,可得到包含m个样本的数据集D’。有一部分样本会多次出现,有些从未出现,估计样本在m次采样中始终没有被采到的概率为:
。即仍有总量的1/3没有出现在训练集中用于测试性能。
- 适用于数据集较小,难以有效划分时
- 能从初始数据集中产生多个不同的训练集,有益于集成学习
- 但是改变了初始数据集的分布,会引入估计偏差
(二)调参与最终模型
- 算法的参数:一般由人工设定,也称为“超参数”
- 模型的参数:一般由学习确定
调参过程相似:先产生若干模型,然后基于某种评估方法进行选择。参数调整对最终性能有关键影响。常用方法是对每个参数选择一个范围和变化步长。
给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。因此在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。这个模型在训练过程中使用了所有m个样本,这才是最终提交给用户的模型。 模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于训练集训练模型,基于验证集上的性能来进行模型选择和调参。
三、性能度量
衡量模型泛化能力的标准,反映了任务的需求。使用不同的性能度量往往会导致不同的评判结果,意味着模型的“好坏“是相对的。回归任务中常用均方误差:,前面也可以加一个系数
。
-
错误率&精度
分类中最常用的性能度量。错误率是分类错误的样本占总样本数的比例,精度是分类正确的样本数占总样本数的比例。
-
错误率:
或
-
精度:
或
-
-
查准率&查全率&F1
错误率不能度量挑出来的样本有多少是被错误判别的。查准率(precision)和查全率(recall)适用于解决此类问题。分类结果的混淆矩阵:
- 查准率P:
- 查全率R:
💡 查准率和查全率是一对相互矛盾的度量?
查准率代表预测为真的样本中有多少确实为真(最好一找一个准),
查全率代表样本中所有为真的样本有多少被找出来了(最好把真的全找出来)。
从逻辑上来理解矛盾关系:要想做到查全,势必要对查找范围和限制逐步放宽,也就是无脑找,总会找到所有的,而这样的结果是会把很多不相关的样本也找出来,影响了查准率。
3.P-R曲线:可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本,按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”:
现实任务中P-R曲线是非单调、不平滑的,在很多局部有上下波动
💡 如何理解逐个把样本作为正例进行预测,如何理解P-R曲线:
排序后逐个把样本作为正例:例如第一次预测第一个样本是正例,其他是反例,列出混淆矩阵后计算P和R;第二次预测前两个样本为正例,计算P和R,以此类推。也就是计算不同判别阈值下的查准率和查全率。
若P为1,则说明没有假阳FP,强调准确性,那么很多的正例会被误判为假阴FN,此时R会趋于0;反之强调查出正例更多。
根据逐个样本作为阈值划分点的方法,可以推敲出,recall值是递增的,因为更多的正例被识别出(但并非严格递增)。而精确率precision并非递减,而是有可能振荡的,虽然正例被判对的变多,但负例被判为正例的也变多了,因此precision会振荡,但整体趋势是下降。例如下图所示:
在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者【一个学习器的P-R曲线被另一个学习器的曲线完全“包住”意味着后者在所有召回率下都具有更高的精确率。这通常说明后者在处理正类别和负类别的样本时更为准确和可靠。】;如果两个学习器的P-R曲线发生了交叉,则难以一般性地断言两者优熟劣,只能在具体的查准率或查全率条件下进行比较。然而,在很多情形下,人们往往仍希望把学习器A与B比出个高低,这时一个比较合理的判据是比较P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例,但这个值不太容易估算,因此人们设计了一些综合考虑查准率、查全率的性能度量,例如平衡点(Break-Event Point, BEP),是查准率=查全率时的取值。
4.F1度量:
基于查准率和查全率的调和平均:,使较小的值不会被忽视掉
5.若对查准率和查全率的重视程度不同,可以使用,定义为:
是加权调和平均:
,其中
是查全率相对于查准率的重要性,
是查全率的影响更大,相反查准率更重要。
- ROC & AUC
很多学习器为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阀值(threshold)进行比较,若大于阀值则分为正类,否则为反类。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。
实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例。
根据任务需求来采用不同的截断点,若更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视“查全率”,则可选择靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏。
ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。ROC全称是“受试者工作特征”(Receiver Operating Characteristic) 线。与的P-R曲线相似,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR)。其中:
💡 理解ROC曲线:当分类阈值最大时,即把所有的样例都预测成阴,此时真阳和假阳都是0,则TPR和FPR都为0,对应坐标(0, 0)。然后依次将分类阈值设置为每个样例的预测值,前一个点为(x, y),若此时的样例本身为阳,则本轮被判别为真阳,上一轮被判别为假阴,真阳+假阴=总阳数目不变,假阳和真阴也不发生变化,则此时的TPR增加,FPR不变,表现为相对于上一个标记点横坐标不变,纵坐标上移,此时坐标为
【m+为总阳的数目】;若此时的样例为阴,则本轮判别结果为假阳,上一轮被判别为真阴,假阳+真阴=总阴数目不变,真阳和假阴也不发生变化,此时FPR增加,TPR不变,表现为相对于上一个标记点纵坐标不变,横坐标右移,此时坐标为
【m-为总阴的数目】。依次用线段连接相邻点,所以表现为上图图b中向上和向右平移的点。
重生之我终于理解ROC曲线怎么玩的了!!!!!!!!!!!!!!!!!!
进行学习器的比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者(假阳率相等时,真阳率更高);若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者优劣,此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。AUC可估算为:,其中x1=0,xm=1。【计算梯形面积】
!!!!—— !!!!
形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合,则排序“损失”(loss)定义为:
即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”.
排序损失对应的是ROC曲线之上的面积,即
。
💡 理解👆
- 加号前第一项:对于每个正例被选为正例之前,预测值比它大的反例已经被判别为正例,即该点的横坐标已经从0向右移动了
个单位,此时它自己向上移动
个单位,那么再乘高
就得到这一行绿色线段左边的矩形面积。
- 加号后第二项:对于每个正例被选为正例时,预测值和它相等的一些反例同时也被判别为正例,即ROC曲线表现为既向右又向上移动,如蓝色线段所示。此时预测值相等的三角形面积之和为第二项。
深度解析roc曲线、AUC与排序损失-阿里云开发者社区
https://developer.aliyun.com/article/1372298
-
代价敏感错误率 & 代价曲线
实际任务中不同类型的错误造成的后果可能不同。为了权衡不同类型错误造成的不同损失,可以为错误赋予“非均等代价”(unequal cost)。以二分类为例,可根据经验设定代价矩阵,
表示将第i类样本预测为第j类样本的代价,一般
。一般情况下,重要的是代价比值而非绝对值。
若计算错误率时不再简单地最小化错误次数,而是希望最小化总体代价。若第0类为正类,第1类为负类,则代价敏感(cost-sensitive)错误率为:
此时ROC曲线不能直接反映学习器的期望总体代价,而代价曲线(cost curve)可以达到此目的。
!!!!!!!!!!!!!啊啊啊啊又到了烧脑时刻!!!!!!!!!!!!!
代价曲线图的横轴是取值为[0,1]的正例概率代价,其中p是样例为正例的概率【"把0错误判断为1" 的情况下的代价占总代价的比例】:
纵轴是取值为[0,1]的归一化代价:
其中FPR是假阳率,FNR=1-TPR是假阴率。其中
是当前为正类且正类中将阳判断为阴的概率乘犯01错误的代价,
是当前为反类且反类中将阴判断为阳的概率乘犯10错误的代价。
🤘代价曲线的绘制:ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR,FPR)【ROC横坐标为真阳率,纵坐标为假阳率时】,则可相应计算FNR。然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如下图所示:
💡 对代价曲线的思考:
为什么截距是(0,FPR)和(1,FNR)?
归一化代价:
其中P(+)是正例概率代价,即横坐标,令x=P(+),则可得到x=0和1时的坐标(0,FPR)和(1,FNR)。
截距代表含义?
和
都是固定的,则p正例的概率决定P(+)的大小。
若全是反例,即p=0,那么P(+)=0;
若全是正例,即p=1,那么P(+)=1。
则假设全是反例,所犯错误只有将反例错判为正例,即FPR;假设全是正例,所犯错误只有将正例错判为反例,即FNR。
对每条线段的理解?
一共有两种错误,线段方程为:
,其中归一化后可理解为
是把正例错的概率误判断为反例乘正例犯错的代价。另一部分是把反例错误判断为正例的概率乘反例犯错的代价。加起来就是正例概率为p时当前的总代价。
为什么会有多条线段?
因为ROC曲线的每个点代表不同的阈值,和不同的FNR、FPR,所以每个点对应一条线段。
为什么代价曲线围成的面积是期望总体代价?
当p固定时,P(+)也是固定的,此时各个分类阈值下的代价即经过(p,0)做一条垂直于x轴的直线和各条代价线段的交点。选择其中y值最小的一点,此时“代价最小”。
期望总体代价 = 正例的概率 x 正例犯错的代价 + 反例的概率 x 反例犯错的代价,其实就是p不同时所有的归一化代价之和。
四、比较检验
使用某种实验评估方法测得学习器的某个性能度量结果,然后对这些结果进行比较。能否直接取得性能度量的值然后“比大小”?实际上性能比较更加复杂。
涉及几个重要因素:①我们希望比较的是泛化性能,然而通过实验评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;②测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即使用相同大小的测试集,若包含的测试样例不同,测试结果也会有不同;③很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同。
⇒统计假设检验(hypothesis test)为学习器性能比较提供了重要依据。假设A和B算法性能相同,然后观察实验结果,并判断在多少的显著程度下假设是否能拒绝假设。基于假设检验结果我们可推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
具体的假设检验方法不用死记硬背,现有的工具包可以直接调用,重要的是什么情况下使用和原因。
由于涉及概率论的细节,在此处不继续研究了,以后跑模型的时候具体学一下。
(1)两学习器比较
- 交叉验证t检验(基于成对t检验)【在每一折上分别测试算法A和B的错误率,如果算法没有显著区别,那么它们的误差应该接近。在k折上每对误差的差值绝对值应该符合零均值,再考虑差值的绝对差判断是否属于某种分布→t检验】:k折交叉验证;5x2交叉验证
- McNemar检验(基于列联表比较反对角线的点,卡方检验)
(2)多学习器比较
- Friedman检验
- Nemenyi检验
【西瓜书】周志华《机器学习》学习笔记与习题探讨(二)④https://zhuanlan.zhihu.com/p/29335782
五、偏差与方差
“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。试图对学习算法的期望泛化错误率进行拆解。对于测试样本,令为
在数据集中的标记(标记/观测值可能和真实值存在误差),
为
的真实标记,
为训练集
上学得模型在
上的预测输出。
-
期望预测:
,即【所有可能的训练数据集】(数据分布Ɗ)训练出的【所有模型预测输出】的期望值。
-
方差(variance)——使用样本数相同的不同训练集产生的方差,【在分布Ɗ上】的【不同训练集训练出的模型】的【预测输出】与【预测输出期望值】的比较:
。度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
-
偏差(bias),即期望输出与真实标记的差别:
。度量了学习算法的期望预测与真实结果的偏离程度,刻画了学习算法本身的拟合能力。
-
噪声,数据集标记和真实标记的方差:
。表达了当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。噪声数据主要来源是训练数据的误标签的情况以及输入数据某一维不准确的情况。
-
为了便与讨论,假定噪声期望
为0,对算法的期望泛化误差进行分解:
其中该项,
是一个数,所以
;
该项,所以可以被消去:
则有:,即泛化误差可分解为方差、偏差和噪声之和。说明泛化能力是由学习算法的能力、数据的充分性、学习任务本身的难度共同决定的。
偏差-方差窘境
一般来说,偏差与方差是有冲突的,这就是偏差-方差窘境(bias-variance dilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合: