机器学习
机器学习学习笔记——第二章:模型评估与选择
文章目录
- 机器学习
- 一、经验误差与过拟合
- 1.1、经验误差与泛化误差
- 1.2、过拟合与欠拟合
- 二、 三个问题
- 三、评估方法
- 3.1、留出法(hold-out)
- 3.2、k折-交叉验证法(k-fold cross validation)
- 3.3、自助法(bootstrap)
- 3.4、调参与最终模型
- 四、性能度量
- 4.1、错误率与精度
- 4.2、查准率、查全率与F1
- 4.3、ROC与AUC
- 4.4、代价敏感错误率与代价曲线
- 五、比较检验
- 5.1、针对单个学习器
- 5.1.1、二项检验
- 5.1.2、t检验
- 5.2、针对多个学习器
- 5.2.1、交叉验证t检验
- 5.2.2、McNemar检验
- 5.2.3、Friedman检验与Nemenyi后续检验
- 六、偏差与方差
一、经验误差与过拟合
1.1、经验误差与泛化误差
- 错误率:分类错误的样本占总样本数的比例
- 精度:1-错误率
- 误差:学习器的实际预测输出与样本的真实输出之间的差异
- 训练(/经验)误差:训练集上的误差
- 泛化误差:新样本上的误差
我们希望学习器的泛化误差越小越好,但我们事先无法确认新样本是啥样的,所以只能努力做到经验误差越小越好。
1.2、过拟合与欠拟合
但是当经验误差过低,学习器会将训练样本一些特点当成一般性质,这时候就会产生过拟合(/过配)
相对的,尚未学好训练模型的一般性质,被称为欠拟合(/欠配)
- 欠拟合由于学习能力低下导致,增加算法复杂度就容易解决
- 过拟合问题是不可避免的
- 运用算法时要询问自己两个问题,这个算法是靠什么来缓解过拟合问题的,它又会在什么程度失效
- 实际情况中可能是经验误差显示的误差越来越小,但是泛化误差却呈现出先下降后上升的趋势,机器学习的目标正是使得模型的误差接近最小处,也正是因为存在了过拟合现象,且不可避免,才存在了机器学习这样的学科。
二、 三个问题
如何获得测试结果?——评估方法(评估该模型在未来的表现)
如何评估性能优劣?——性能度量(评估该模型是否符合需求)
如何判断实质差别?——比较检验(评估改模型的统计学表现)
三、评估方法
- 评估方法:用来评判面对同一个数据集,哪个算法(哪些参数)更加适合的,但无论用哪个方法(参数)得出算法的性能,最后都要将完整的数据集D投入训练,重新获得新的模型。
- 泛化误差通常被认为是学习器好坏的评估标准
- 通常可以利用测试集去测试学习器,得到的测试误差被作为泛化误差的近似
- 假设测试样本从真实样本中独立同分布采样获得,同时测试集也尽可能与训练集互斥。
- 但是实际生活中,我们一般只有一个有限数量的数据集D,一般需要利用下述几种办法来拆分数据集,用于训练与测试。
3.1、留出法(hold-out)
- 留出法:将数据集D划分为训练集S和测试集T,其中D=S∪T,S∩T=Ø
- 遵守准则
- 保持数据分布一致性(例如: 分层采样,训练集与测试集中样本类型占比应相近/等)
- 多次重复划分(例如: 100次随机划分后返回平均)
- 测试集不能太大(训练集与原数据差别大)、不能太小(评估结果不稳定)(例如: 1/5~1/3)
- 一般而言,测试集至少应该包含30个样例。
3.2、k折-交叉验证法(k-fold cross validation)
- 留出法存在着一个潜在的隐患,即使随机划分了100次,但仍然有可能有一两个样本未被用于测试,但这两个样本恰好又对模型有着影响,为了照顾到每个样本,就有了k折-交叉验证法。
- k折-交叉验证法:将数据集D划分为k个大小相似的互斥子集,既D=D1∪D2∪…∪Dk, Di∪Dj=Ø ( i ≠ j ),取k-1个子集做训练集,1个子集做测试集。通常k=10。
- 注意
- 每个子集都是从D中分层采样获得。
- 为了保证将数据集划分为k个这步操作对模型造成印象,这一步通常要随机使用不同的划分重复p次,(当k=10,重复划分10次时)此时就是10*10,训练/测试次数仍为100次。
- 留一法(Leave-One-Out, LOO)
- 定义:数据集D中包含m个样本,另k=m。
- 优点:
- 留一法不受随机划分影响。
- 绝大多数情况下,留一法训练出来的模型与期望用D数据集训练出来的模型很相似,评估结果更准确。
- 缺点:
- 成本随数据量增大而增大。
- 测试数据量过少,模型结果可能存在偏差。
- NFL定理,表明此方法并非任何情况下的最优解。
3.3、自助法(bootstrap)
- 上述两种方法虽然保留了数据分布,但是却都需要保留一部分样本用于测试,利用此训练集获得的模型与用数据集D训练出来的模型终究会存在一些偏差(留一法相对而言,计算复杂度高)。
- 为了减少训练规模变化,高效进行实验评估,设计出自助法。
- 自助法:基于自助采样(boostrap sampling)(亦称”有放回采样“,”可重复采样“),对一个包含有m个样本的数据集D,对其进行采样产生数据集D’,每次挑选一个样本,拷贝后放入D‘,原数据放回数据集D,如此重复m次。如此存在一部分样本在数据集D‘中重复出现,另一部分不出现,将另一部分的样本作为测试集。这样的结果,亦称包外估计(out-of-bag estimate)
- 样本不被采集到的概率约为0.368
- 样本不被采集到的概率约为0.368
- 优点:训练集与原样本集同规模
- 缺点:数据分布有所改变
- 适用场景:数据集较小,或数据分布对训练影响较小时适用
3.4、调参与最终模型
调参数和选算法实际上都是在进行模型的选择(实际上只要是在机器学习中涉及变化的步骤都是在进行模型选择),两者的选法也差不多,均是产生多个模型后,基于某种评估方法来进行选择。
- 超参数:算法的参数,一般由人工设定(数目常在10以内,常常会对每个参数设定一个范围和步长,来限制最后形成的模型数量,从而降低成本)
- 参数:模型的参数,一般由学习确定
- 训练集,验证集,测试集:验证集的作用就是用来调参,用训练集训练出来模型后,导入验证集去验证模型的好坏,从而进行调参后在进行训练,重复步骤,直至模型性能差异不大时,确认算法参数,将训练集与验证集合并后,再次训练确认模型,最后用测试集进行测试。
- 最终模型:在确认完算法和参数后,将完整的数据集D投入训练,重新获得新的模型。
四、性能度量
- 性能度量:衡量模型泛化能力的评估标准(模型的好坏由算法,数据与任务需求决定)
- 回归任务的性能度量:均方误差(mean squared error)
其中yi为xi的真实标记(结果),f为模型,f(xi)为模型的预测结果。 - 下面介绍分类任务常用的指标
4.1、错误率与精度
-
错误率:分类错误的样本占总样本数的比例
-
精度:1-错误率,分类正确的样本占总样本数的比例
-
分类错误率:
-
分类精度:
4.2、查准率、查全率与F1
错误率与精度并不能满足所有任务需求,需要引入新的指标。
- 查准率(precision):检查出来的信息中有多少比例是用户感兴趣的
- 查全率(recall):用户感兴趣的信息中有多少被检索出来了
- 混淆矩阵(confusion matrix):
T:true,F:false,P:positive,N:negative - 定义:
- 一般情况下(除开一些简单任务)查准率与查全率是一对矛盾的数值,例如有一批西瓜,我们希望尽可能多的获得好瓜,这时只要把全部的瓜选上,这时所有好瓜必都被选上,但是查准率会偏低;若希望选出好瓜的比例尽可能高,这时只要挑选最有把握的瓜即可,此时查全率会偏低。
- 既然这两者是矛盾的属性,那就可能存在针对同一数据集,A算法P高R低,B算法P低R高的情况,那这时候要如何判断哪种算法更优秀呢?
- P-R曲线:以P为纵轴,R为横轴,预测结果为正例的可能性为顺序(从最有可能到最不可能)绘制P-R曲线
- 如果某学习器的曲线完全包裹另一学习器,则认为其性能更优(如A优于C)
- 如果俩曲线产生交叉(如A和B),则难以定论(可以通过计算曲线下面积来定论,不过其较难估算)
- 由此引入平衡点 (Break Even Point):P=R时的点,此时认为A优于B(A的BEP=0.8, B的BEP=0.7),不过BEP还是过于简化了,更常用的为F1度量
- F1度量:F1是基于查准率和查全率的调和平均(harmonic mean) 定义的相较于算数平均
P
×
R
2
\frac{P\times R}{2}
2P×R与几何平均
P
×
R
\sqrt{P\times R}
P×R,调和平均更重视较小值
- 权重β:一些应用中,对查全率与查准率有不同的偏好,引入F1度量的一般形式Fβ
- 存在多个二分类混淆矩阵
- 方法一:先计算每个矩阵的P和R,再计算平均值,宏查准率(macro-P),宏查全率(macro-R),宏F1(macro-F1)
- 方法二:先计算得到TP,FP,TN,FN的平均值得,再得到微查准率(micro-P),微查全率(micro-R),微F1(micro-F1)
4.3、ROC与AUC
- 受试者工作特征(Receiver Operating Characteristic, ROC):与P-R曲线类似,不过横轴改为了假正例率(False Positive Rate, FPR),纵轴为真正例率(True Positive Rate, TPR)
- 这里可以看出TPR与查全率R同义
- ROC曲线
- 实际应用中数据集是有限的,无法绘制上图那种光滑曲线,只能绘制出下图的近似ROC曲线。
- 绘图步骤:给定M个正例和m个反例,根据学习器的预测结果对样例排序,然后将分类阈值设为最大,既所有样例预测为反例,此时FPR与TPR都是0,在坐标轴(0,0)处标记一个点,然后将分类与之依次设为每个样例的预测值(既把依次把每个样例设为正例)。设前一个标记点为(x,y),若当前为正例则对应标记坐标点为(x,y+1/M),若当前为反例则对应标记坐标点为(x+1/m,y),依次相连。
- 绘图步骤:给定M个正例和m个反例,根据学习器的预测结果对样例排序,然后将分类阈值设为最大,既所有样例预测为反例,此时FPR与TPR都是0,在坐标轴(0,0)处标记一个点,然后将分类与之依次设为每个样例的预测值(既把依次把每个样例设为正例)。设前一个标记点为(x,y),若当前为正例则对应标记坐标点为(x,y+1/M),若当前为反例则对应标记坐标点为(x+1/m,y),依次相连。
- 同P-R曲线,如果曲线A将曲线B完全包裹,则认为曲线A对应的算法优于曲线B对应的算法,如果产生交集,则比较ROC曲线的下面积AUC(Area Under ROC Curve)
- AUC:从定义可得,AUC可以是曲线下各部分面积之和。
- 若ROC曲线由{(x1,y1), (x2,y2), …, (xm,ym)}组成,其中(x1=0,xm=1),则AUC可以估算为
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)\bullet(y_i+y_{i+1})} AUC=21i=1∑m−1(xi+1−xi)∙(yi+yi+1)
- 若ROC曲线由{(x1,y1), (x2,y2), …, (xm,ym)}组成,其中(x1=0,xm=1),则AUC可以估算为
4.4、代价敏感错误率与代价曲线
- 前面的评估方法大多隐式的假设了均等代价。
- 但现实生活中会出现这样的情况,不同类型的错误造成的后果也不同,为权衡不同类型错误造成的损失,可为错误赋予非均等代价(unequal cost)
- 一般关注代价比值,而非其确切值(如Cost01:Cost11=3:1)
- 此时ROC曲线已经不能直接反映学习器的期望总体代价了,引入了代价曲线
- 代价曲线:
- ROC曲线上每一个点对应代价平面(横纵轴为[0-1])上一条线,设ROC曲线上点坐标为(FPR,TPR),在代价平面上画出一条从(0,FPR)到(1,1-TPR)的线段,每一个点都绘制为一条线,最终围出的下面积,就是学习器的总体期望代价。
- ROC曲线上每一个点对应代价平面(横纵轴为[0-1])上一条线,设ROC曲线上点坐标为(FPR,TPR),在代价平面上画出一条从(0,FPR)到(1,1-TPR)的线段,每一个点都绘制为一条线,最终围出的下面积,就是学习器的总体期望代价。
五、比较检验
- 在通过评估方法测得学习器的某个性能度量后,能否直接用于比较以评判优劣呢?
- 有三个方面指出其不可行。
- 测试性能不等于泛化性能测试
- 性能随着测试集的变化而变化
- 很多机器学习算法本身有一定的随机性
- 这边利用了统计学上的假设检验,来评判学习器的性能。(默认以错误率ε为性能度量)
- 假设检验:由于现实中只能确认测试错误率ε0,而无法获得泛化错误率ε,两者未必相同,但两者接近的可能性较大,因此可以依据ε0去估推出ε的范围。
- 下面内容涉及大量数学与统计学知识,看着令人头疼,加上现在软件可以直接调用相关的算法来实现效果,我个人觉得了解下概念,知道有这么个东西即可。除非你想深入了解,可以参考西瓜书p37-p44,或者看下这篇博客,里面和书籍内容相差不大。
5.1、针对单个学习器
5.1.1、二项检验
5.1.2、t检验
5.2、针对多个学习器
5.2.1、交叉验证t检验
5.2.2、McNemar检验
5.2.3、Friedman检验与Nemenyi后续检验
六、偏差与方差
- 偏差-方差分解(bisa-variance decomposition) :用于解释学习算法泛化性能的一个工具
- 泛化误差可以被分解为偏差,方差和噪声之和
- 偏差(期望输出与真实标记的差别):度量了学习算法的期望预测与真实结果的偏离程度( 既刻画了学习算法本身的拟合能力)
- 方差:度量了同样大小的训练集的变化所导致的学习性能的变化(既刻画了数据扰动所造成的影响)
- 噪声:表达了当前任务上任何学习算法所能达到的期望泛化误差的下届(既刻画了学习问题本身的难度)
- 总结:泛化性能由学习算法的能力,数据的充分性以及学习任务本身决定。