前言
在机器学习中,我们需要用一些方法去衡量我们选择的模型效果的优劣。这里我记录了一些比较常见的方法,以此来评估我们选择的模型在此场景下的优劣程度。
一、介绍
我们将学习器预测输出与样本真实输出的差异称为误差。预测正确的样本数占样本总数比例称为准确率(accuracy),相反错误样本数占样本总数的比例称为错误率(error rate) 。 但是准确率并不能有效说明机器学习性能,实际上达到准确率100%的学习器在大多数情况都不好。
我们实际希望得到的是能够在新样本上表现很好的机器。在新样本上的误差,我们称为泛化误差。训练学习器的时候,学习器学习训练集“太好”,导致将训练集的一些特点当成所有样本的普遍规律,这样会导致泛化性能下降,这种现象在机器学习中被称为“过拟合”(overfitting)。相反的学习器学习训练集太差,训练集一般的性质都没有学好,称为“欠拟合”(underfitting)。
二、评估方法
现实任务中,我们需要选择合适的模型和合适的参数。那么我们方案通常是,对候选的模型进行泛化误差评估,选取泛化误差最少的模型。所以在我们模型训练之前对数据集进行划分,分成训练集和测试集。我们会根据数据集的情况(数据量,分布是否均匀等)来选择合适的划分方式。
我们需要使用一个测试集来测试学习器对新样本的泛化能力。测试样本也是从样本真实分布中独立同分布采样而得。测试集和训练集尽可能互斥。以下是常用的几种方式:
2.1 留出法
把数据集分成互不相交的两部分,一部分是训练集,一部分是测试集。
保持数据分布大致一致,类似分层抽样
训练集数据的数量应占2/3~4/5
为了保证随机性,将数据集多次随机划分为训练集和测试集,然后在对多次划分结果取平均。
2.2 交叉验证法 如图2-1所示:
将数据集随机分为互斥的k个子集,为保证随机性,P次随机划分取平均。
将k个子集随机分为k-1个一组剩下一个为另一组,有k种分法。
将每一种分组结果中,k-1个子集的组当做训练集,另外一个当做测试集,这样就产生了k次预测,对其取平均
称为p次k折交叉验证,一般取k=10
2.3 自助法
适用于样本量较小,难以划分时。换句话说,样本量足够时,用自助法并不如留出法和交叉验证法,因其无法满足数据分布一致。
每次随机从数据集(有m个样本)抽取一个样本,然后再放回(也就是说可能被重复抽出),m次后得到有m个样本的数据集,将其作为训练集
始终不被抽取到的样本的比例:
也就是说这保证了训练集样本数(不重复)在2/3左右
2.4 小结
(1)自助法在数据量较小,训练集测试集难分的时候比较适用。在初始数据量足够时,留出法和交叉验证法更加适用。
(2)我们在对比不同算法模型的泛化性能时,我们用测试集来评估模型实际的泛化能力,而把训练集另分为训练集和验证集,用验证集评估来做模型选择和调参。通常我们会多随机划分数据集来进行模型调优,来减少数据集分布差异带来的影响。
(3)当模型选择完成后,学习算法和参数配置已选定,此时应该将所有数据集用来重新训练模型,这个模型在训练过程中使用了所有的样本,这才是最终我们提交给用户的模型。
三、评估指标
3.1常用的预测评估方法
我们需要从100名同学中(男50名,女50名),选出所有女生。通过分类器模型后,选取结果为40名女生20名男生。
分类结果混淆矩阵 如图 3-1 所示:
我们需要的是女生所以,选取女生称为相关,选取的男生为无关。即我们可以得到混淆矩阵,如图3-2所示:
accuracy(准确率)是用来计算识别正确的人数在总人数中的比例,即分类正确的女生数占总人数比例,TP/(TP+FP+FN+TN)=40/(40+20+10+30)。根据accuracy,在某些场合可以说明一个分类器的有效度,但是很多时候,并不能充分评估一个模型的好坏。
precision(精准率)计算检测到的正确人数占模型中所有检测到的人群比例,即分类出的女生人数占所有分类人数比例,P=TP/(TP+FP)=40/(40+20)=0.67
recall(召回率)计算检测到正确人数占正确的总人数比例,即分类正确的女生数量占所有女生数的比例,R = TP/(TP+FN) = 40/(40+10)=0.8
根据P和R,我们根据召回率可以说分类的很好,但是根据精准率我们可以说分类不好,所以只根据P和R无法更好的评估分类效果,这时我们就可以引入F-measure,Fβ表达式如图3-3所示:
当β等于1时,F-measure就被称为F1,F1表达式如图3-4所示:
F1 为了衡量召回率和精准率两个综合评估值,计算公式:F1=2*PR/(P+R),F1在对预测如果只有一个二分类混淆矩阵,那么用以上的指标就可以进行评价,但是如果我们需要在n个二分类混淆矩阵上要综合考察评价指标的时候就会用到宏平均(Macro-F1)和微平均(Micro-F1)。
举个简单例子,如果有四个类别需要我们分类,分类器得出结果如下图3-5所示:
Micro-F1-measure来衡量分类效果优劣:
'micro':通过先计算总体的TP,FN和FP的数量,再计算F1。根据图3-5我们已经给出了TP、FN、FP的总数,所以micro的 精确度P 为 TP/(TP+FP)=8/(8+4)=0.666 召回率R TP/(TP+FN)=8/(8+6)=0.571 然后将micro-P,micro-R带入F1表达式中得:2PR/(P+R) = 20.666*0.571/(0.666+0.571) = 0.615
Macro-F1-measure衡量分类效果:
'macro':分布计算每个类别的F1,然后做平均(各类别F1的权重相同),根据图3-5给出的数据,可以得出
类一的P=3/(3+0)=1 , R=3/(3+2) = 0.6 , F1 =210.6/(1+0.6) = 0.750
类二的P=2/(2+0)=1 , R=2/(2+2) = 0.5 , F1 =210.5/(1+0.5) = 0.667
类三的P=2/(2+3)=0.4 , R=2/(2+1) = 0.667 , F1 =20.40.667/(0.4+0.667) = 0.500
类四的P=1/(1+1)=0.5 , R=1/(1+1) = 0.5 , F1 =20.50.5/(0.5+0.5) = 0.500
最后将类一到类四的所有F1值取数学平均值得到Macro-F1值,Macro-F1=(0.750+0.667+0.5+0.5)/ 4 = 0.604
由于macro没有考虑到各个类别的样本大小情况,所以如果这个数据集中各个类的分布不平衡的话,更建议使用mirco-F1。具体使用哪一种评估标准还是要看具体的数据分布情况。
理性状态是召回率与精准率都高
通常召回率和精准率在大规模数据集合中相互制约,召回率高,精准率低;精准率高,召回率低;我们通常需要找一个平衡点。如果两者都低,则表示出了问题。
在不同场景,我们会用不同的阈值统计不同阈值下的召回率精准率,如搜索场景,我们会保证召回率,提升精准率。
注:检测模型的优良是根据应用场景来,检测方式有很多如刚才介绍的accuracy,precision,recall,F1等,根据应用的场景来选择合适的评估方法是我们需要做的,如对预测的出错有非常严格要求的时候,我们需要优先考虑选择召回率高的,比如在病情预测等场景。
3.2 mAP(mean Average Precision)
mAP是为解决P,R,F-measure的单点值局限性的。Average Precision,即平均精确度。mAP即平均AP值。
根据P-R图,我们可以直观表示全局性能的指标。precision,即准确率;recall,即召回率。P-R即以precision 和 recall作为纵、横轴坐标的二维曲线。 如图3-6所示
如何根据P-R图评价学习性能:
第一种方法是比较曲线下面积,但值不太容易估算;
第二种方法是比较两条曲线的平衡点,平衡点是“查准率=查全率”时的取值,在图中表示为曲线和对角线的交点。平衡点在外侧的曲线的学习器性能优于内侧。
第三种方法是F1度量和Fβ度量。F1是基于查准率与查全率的调和平均定义的,Fβ则是加权调和平均。
mAP数学公式:如图3-7所示:
3.3 ROC(Receiver Operating Characteristic)
ROC可以用来说明二分类器在识别阈值变化时的性能, 在逻辑回归中,我们设置一个阈值,大于阈值我们称为正类,小于阈值为负类。我们降低阈值,会使更多样本分为正类,同时也会使得一部分负类被错分为正类。ROC曲线可以形象表示这一变化,评价分类器的好坏。
ROC有两个重要指标,一个TPR代表正例分对的概率,另一个为FPR,代表负例错分为正例的概率。
True Positive Rate ( TPR ) = TP / [ TP + FN] ,TPR代表能将正例分对的概率
False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率
在 ROC 空间中,每个点的横坐标是 FPR,纵坐标是 TPR,这也就描绘了分类器在 TP(真正率)和 FP(假正率)间的 trade-off2。如图3-7所示
由于二值分类问题往往是连续的,通过变化阈值大小,进行分类。根据分类结果计算得到ROC空间上的点,连接这些点形成的ROC curve。ROC curve经过(0,0)(1,1),实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。
3.4 AUC(Area Under roc Curve)
通过ROC curve可以直观的看出分类器的performance,但是我们希望有一个数值来表示这个分类器具体的好坏,这个就是AUC(Area Under roc Curve) 。
顾名思义AUC就是ROC curve下方与坐标轴围成的面积。
随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。
通常AUC值在0.5~1.0之间,AUC值越大,表示分类器效果越好。
ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反)。
3.5 方差与偏差
学习器在新样本上产生的误差被称为泛化误差,泛化误差又可以分解为偏差(bias), 方差(variance) 和噪声(noise) 。
偏差(bias):顾名思义,就是偏离了某个“标准”,离真实值距离大小。偏差度量了学习算法的期望预测与真实结果的偏离程度, 即刻画了学习算法本身的拟合能力。
方差(variance):方差表示的是离散程度,在期望值附近的波动程度。方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响 。
噪声:噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界, 即刻画了学习问题本身的难度。巧妇难为无米之炊, 给一堆很差的食材, 要想做出一顿美味, 肯定是很有难度的.
噪声属于不可约减的误差,所以这里我们只需关注方差和偏差。
我们利用靶心图来直观体现偏差与方差,如图 3-8所示:
假设红色的靶心区域是学习算法完美的正确预测值, 蓝色点为每个数据集所训练出的模型对样本的预测值, 当我们从靶心逐渐向外移动时, 预测效果逐渐变差.
很容易看出有两副图中蓝色点比较集中, 另外两幅中比较分散, 它们描述的是方差的两种情况. 比较集中的属于方差小的, 比较分散的属于方差大的情况.
再从蓝色点与红色靶心区域的位置关系, 靠近红色靶心的属于偏差较小的情况, 远离靶心的属于偏差较大的情况
泛化误差:
方差:
偏差:
f(x;D):由训练集D学得的模型f对x的预测输出
f¯(x):模型f对x的期望预测输出
一般来说,我们希望方差和偏差都尽可能小,但实际上方差和偏差有冲突,称为偏差-方差窘境 (bias-variance dilemma)
给定一个学习任务, 在训练初期, 由于训练不足, 学习器的拟合能力不够强, 训练集扰动能力不足以使学习器显著变化,也就是欠拟合的情况,此时偏差影响最大。
随着训练程度的加深, 学习器的拟合能力逐渐增强, 训练数据的扰动也能够渐渐被学习器学到,此时方差逐渐主导了泛化错误率。
充分训练后, 学习器的拟合能力已非常强, 训练数据的轻微扰动都会导致学习器发生显著变化, 当训练数据自身的、非全局的特性被学习器学到了, 则将发生过拟合。
3-6 回归损失函数
MSE、MAE、Huber、RMSE常用在回归预测模型上,预测结果不是0和1这种类别,而是连续的数值的时候,我们通常会使用这几种方式来评估模型的优劣。具体可参考文章五个常用损失函数
(1)均方误差MSE: Mean Squared Error
均方误差是指参数估计值与参数真值之差平方的期望值; 回归任务最常用的评估指标,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。如图3-12所示:
我们可以看到MSE对误差取了平方,也意味着如果预测值与真实值差距大于1,则MSE会进一步增大误差。也就是说如果检测的时候出现异常点,会导致误差增大,MSE相对于MAE来说对异常点会更敏感。
(2)均方根误差(RMSE)
均方误差:均方根误差是均方误差的算术平方根。如图3-13所示:
RMSE就是MSE的平方根,与MAE处于同一个量级。均方根误差标准差能反映一个数据集的离散程度。平均数相同的,标准差是未必的,如第一组数据为3 、4 、5。第二组数据2 、 4、 6。两组平均值都是4。但是第一组的三个数值相对更靠近平均值,也就是离散程度小,均方差就是表示这个的。RMSE计算模型的损失会以牺牲了其它样本的误差为代价,朝着减小异常点误差的方向更新,然而这会降低模型的整体性能。
(3)平均绝对误差(MAE: Mean Absolute Error)
平均绝对误差是绝对误差的平均值,平均绝对误差能更好地反映预测值误差的实际情况。如图3-14所示:
fi表示预测值,yi表示真实值
MAE对异常点的鲁棒性很好,直观上来理解,当我们最小化MAE时会发现,其实我们计算的是样本点目标值的中位数,而最小化MSE是所有目标值的平均数。对异常值来说,中位数的鲁棒性优于平均数。但是MAE有个严重的缺陷,在神经网络中,它的更新梯度始终相同,意味着在损失很小时,梯度也不会减小,我们必须对应调整学习率,当损失减小时,调小学习率。
(4)平滑平均绝对误差(Huber Loss)
Huber损失对数据中的异常点没有平方误差损失那么敏感。它在0也可微分。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数δ(delta)来控制。当Huber损失在[0-δ,0+δ]之间时,等价为MSE,而在[-∞,δ]和[δ,+∞]时为MAE。如图3-15所示:
使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。
四、结语
本篇文章介绍了模型评估常用的方法,评估方式根据应用场景的不同会做不同的选择也会做适当的调整,通过这些方法我们就可以合理的评估模型以此来调整优化我们的模型参数或者选用更合适的模型。欢迎对此感兴趣的小伙伴一起学习探讨。最近会写一些机器学习相关的内容,都是自己的笔记,如果有什么错误,还请大家指出来,非常感谢。