《机器学习》及实战一、模型评估与选择

一、前言

博主一时兴起开始写博客啦,不知道啥时候兴趣下去。( ̄▽ ̄)"。初衷是为了把自己学习的内容复习一遍,巩固自己知识用的。但细想何不分享出来,让更多人少走弯路。
博主一开始只学习了深度学习,但对其中公式原理甚是不解啊,想着过遍基础吧,也正直新冠疫情,在家闲来无事,就用了1个月的时间,突击了一下机器学习的内容,会在近几天把一个月的收获发出来的,时间紧促,如有错误,请不吝指正。

二、模型评估与选择

1 评估方法

留出法

留出法很简单,无非三七分,二八分之类的,但是要注意训练集与测试集同分布或者进行多次随机划分,训练出多个模型,最后取平均值。例如我有一组有100个样本的数据集,其中正例70个,反例30个,我没有随机划分。而是选择了70个正例为训练集,那么我训练出来的模型,那错误率几乎就是100%了

K折交叉验证法

10折交叉验证
此方法用了留出法的留一法,将样本空间划分为k个大小相似的互斥子集,每次使用k-1个子集作为训练集,余下的为测试集,这样k是几,就进行几次训练几次测试,最后将测试结果求平均,如上图所示。它的缺点也很明显,数据量较大时,对算力要求较高

自助法

通过有放回采样产生训练集,有放回这样的作法肯定就有没有被采样到的,以此作为测试集。给定包含m个样本的数据集D ,每次从D 中采样一个样本,拷贝后放入D′中,采样m次,得到包含m个样本的数据集D′。明显D中有一部分样本会多次出现,而另一部分样本不出现。
于是估计样本在m次采样中始终不被采到的概率:

通过自助采样,初始数据集D中约有36.8%的样本未出现在测试集D’中。自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法 能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处. 然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差.因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

2 性能度量

在预测任务中,给定样例集 D = {(X1, Y1), (X2, Y2), . . . , (Xm, Ym)}, 其中Yi是示例 Xi 的真实标记.要评估学习器 f 的性能,就要把学习器预测结果 f(x) 与真实标记 Y进行比较。对学习器的泛化性能的评估,衡量模型泛化能力的评价标准,就是性能度量(performance measure)。
回归任务最常用的性能度量是"均方误差" (mean squared error) 。

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


解释一下:第一个式子很容易理解吧?将预测值减去真实值求和再平均,第二个式子只是第一个的另一个写法,只不过第一个用于离散情况,第二个用于连续情况,1/m用各自的概率p代替,求和用积分代替了。

错误率与精度

这是分类任务中最常用的两种性能度量, 既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例.对样例集 D, 分类错误率定义为
在这里插入图片描述
(其中小双杠是统计,满足括号里的条件的元素的个数的意思。相当于if语句)
精度则定义为:
在这里插入图片描述

查准率、查全率与Fl

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划 分为真正例(true positive)、假正例(false positive)、真反倒(true negative)、 假反例(false negative)四种情形,令 TP、 FP、 TN、 FN 分别表示其对应的 样例数,则显然有 TP+FP+TN+FN=样例总数.分类结果的混淆矩阵。
在这里插入图片描述
先看一下查准率,查全率的公式定义,下面我再用白话解释一遍。
在这里插入图片描述
查全率就是真实为正例的样本有多少被预测出来,强调的是所有情况,突出了‘全’字。查准率是我预测为正的样本有多少是正确的,突出了‘准’字。
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。再来白话解释一下为什么会这样?如果我在谨慎的条件下筛选,那么肯定通过我这一关的样本就少,我的准确率会提高,但是真实是正例的我没有预测出来的数量就会增多,因为有一点疑问我就不让它通过,我这个‘全’肯定会减少。所以就很容易理解查准率和查全率不可能同向的。

在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为"最可能"是正例的样本,排在最后的则是学习器认为"最不可能"是正例的样本.按此顺序逐个把样本作为正例进行预测,则每次可以 计算出当前的查全率、 查准率以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称 “P-R曲线"显示该曲线的图称为 “P-R图”。
再讲P-R图前,先看一下这个排序,举一个简单的例子。(判断一个数是否为5)。

设越往右分值越高,中间的竖线是阈值,也就是’我‘在那把关,检查让谁出城,如果我在左边第一个,那么我就查的很严格,一般人我不让他过去( $ _ $ )。于是通过的3个数全是5(正例),我的准确率不就是100%了嘛,但是这个样本集有6个5,我没有查全,那么查全率就为3/6。再如我如果在左边第一个,我查的松,只要长得不太过分我就让他出城,这时可以看出,样本集中的5全都出去了,查全率就是100%,但不该出城的也有出去的,8个中有6个正确的,查准率就是6/8了。
好,现在再看一下"P-R图”。
在这里插入图片描述
P-R 图直观地显示出学习器在样本总体上的查全率、 查准率,在进行比较时,若一个学习器的 P-R 曲线被另一个学习器的曲线完全"包住" ,则可断言后者的性能优于前者,例如上图中学习器 A 的性能优于学习器 C; 如果两个学习器的 P-R 曲线发生了交叉呢, 如A 与 B 难以判断两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较然而,在很多情形下,人们往往仍希望把学习器 A 与 B 比出个高低. 这时一个比较合理的判据是比较 P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对"双高"的比例.但这个值不太容易估算, 因此人们设计了一些综合考虑查准率、 查全率的性能度量.
"平衡点 " (Break-Event Point,简称 BEP)(方法1)就是这样一个度量,它是"查准率=查全率"时的取值,例如上图中学习器 C 的 BEP 是 0.64,而基于 BEP 的比较,可认为学习器 A 优于 B .
但 BEP 还是过于简化了些,更常用的是 F1(方法2) 度量:
在这里插入图片描述
在一些应用中,对查准率和查全率的重视程度有所不同.例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率重要。
F1就是基于查准率与查全率的调和平均(harinonic mean)定义的:
在这里插入图片描述
可通过此式推导F1公式。

ROC 与 AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与 一个分类阔值(threshold)进行比较,若大于阈值则分为正类,否则为反类.例如,神经网络在一般情形下是对每个测试样本预测出一个 [0.0,1.0] 之间的实值, 然后将这个值与 0.5 进行比较,大于 0.5 则判为正例,否则为反例.这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,“最可能"是正例的排在最前面, “最不可能"是正例的排在最后面.这样,分类过程就相当于在这个排序中以 某个"截断点” (cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例.(相似与前面的判断是否为5的例子)
与 P-R 曲线使用查准率、查全率为纵、横轴不同,ROC 曲线的纵轴是"真正例率” (True Positive Rate,简称 TPR),横轴是"假正例率" (False Positive Rate,简称 FPR),基于表 2.1 中的符号,两者分别定义为
在这里插入图片描述
在字面意思也很好理解,大白话又来了(ง •_•)ง,“真正例率” 就是真实为正例的中有预测为正的概率。“假正例率” 就是真实为反例的中有预测为正的概率。
显示 ROC 曲线的图称为 “ROC 图"下图为一个示意图,显然,对角线对应于 “随机猜测” 模型,而点 (0,1) 则对应于将所有正例排在所有反例之前的"理想模型”。

进行学习器的比较时,与 P-R 图相似,若一个学习器的 ROC 曲线被另一 个学习器的曲线完全"包住", 则可断言后者的性能优于前者;若两个学习器 的 ROC 曲线发生交叉,则难以判断两者孰优孰劣. 此时如果一定要进行比较, 则较为合理的判据是比较 ROC曲线下的面积,即 AUC (Area Under ROC Curve)。
在这里插入图片描述
形式化地看, AUC 考虑的是样本预测的排序质量,因此它与排序误差有紧密联系.给定 m+个正例和 m- 个反例,令 D+ 和 D-分别表示正、反例集合, 则排序"损失" (loss)定义为

单看公式是不是很懵逼,同样咱们用判断是否为5的那个例子来说明一下。

蓝色的为反例的序号,m-为6,红色的为正例序号,m+为6。分数从左到右升高。判断一下反例中是否有分数比正例高。序号+1,有-5,-6的分数比它高,有两个。同理,+2有一个-6,+3有一个-6,故共2+1+1=4个。(m+)+(m-)=12。就解出了rank_loss = 4 / 12。
考虑每一对正、反例,若正例的预测值小于反例,则记一个"罚分,相等则记0.5个"罚分",容易看出 , lrαnk 对应的是 ROC 曲线之上的面积:若 一个正例在 ROC 曲线上对应标记点的坐标为 (x,y), 则 x 恰是排序在其之前的反例所占的比例,即假正例率.因此有在这里插入图片描述

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

在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同. 例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者, 看起来都是犯了"一次错误"但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成 严重的安全事故.为权衡不同类型错误所造成的不同损失,可为错误赋予"非均等代价" (unequal cost).
以二分类任务为例,我们可根据任务的领域知识设定一个"代价矩阵" (cost matrix),如下表所示,其中 costij 表示将第 i 类样本预测为第 j 类 样本的代价.一般来说, costii = 0; 若将第 0 类判别为第 1 类所造成的损失更大,则 cost01 > cost10; 损失程度相差越大, cost01 与 cost10值的差别越大。

回顾前面介绍的一些性能度量可看出,它们大都隐式地假设了均等代价, 定义的错误率是直接计算"错误次数",并没有考虑不同错误会造成不同的后果.在非均等代价下,我们所希望的不再是简单地最小化错误次 数,而是希望最小化"总体代价" (total cost). 若将上表中的第 0 类作为正类、第 1 类作为反类,令 D+ 与 D一分别代表样例集 D 的正例子集和反例子 集,则"代价敏感" (cost-sensitive)错误率为

这个式子也是通俗易懂的,我们把cost01,与cost10看成罚分,只要与预测错误,我们就罚分。
下面就是代价曲线。这里看一下知乎上的讲解
代价曲线的目的就是:对于一个模型,根据p(p = 正例/总体)的不同,找到使代价总期望最小的模型的阈值。
在非均等代价下, ROC 曲线不能直接反映出学习器的期望总体代价,而 “代价曲线” (cost curve) 则可达到该目的.代价曲线图的横轴是取值为 [0,1] (因为归一化了,下有公式)的正例概率代价:

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

FPR 是定义的假正例率ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值