【2】模型评估与选择

模型评估与选择

在机器学习项目中,归根结底是要建立一个模型,能很好的解决我们的问题。比如,图像分类。但是,怎样去衡量一个模型的好坏呢?又怎样在多个模型中选择最好的那一个呢。

一般情况下,这个问题也不难理解。比如做一个二分类问题,只要分类的结果正确的越多,当然模型的准确率就越高,有多个模型时,选择正确的最多的那个就好了。(不考虑算法复杂度的情况下)

但是,如果问题比较复杂,可能单纯的准确率就无法满足我们的需求了。不同的问题关注的性能指标也是不同的。

1.过拟合与欠拟合

一般而言,我们在训练一个模型时,有训练集和验证集,还有测试集。随着训练轮数的增加,一般,模型在训练集上的效果会越来越好,在验证集上的效果也会慢慢提高。
过拟合(overfit):模型在训练集上效果非常好,在验证集和测试集上效果比较差甚至很差。
欠拟合(underfit):模型在训练集上效果就比较差,在验证集和测试集上更差。

在这里插入图片描述
比如,我们建立一个模型分类树叶。
过拟合时,模型可能认为树叶都带有锯齿(因为我们的两个训练样本刚好都有锯齿),当模型遇到一个新的不带锯齿的树叶,他会认为这个不是树叶。
欠拟合时,模型只学到了树叶是绿色的,然后他遇到所有绿色的东西都认为是树叶。
这两种情况,都会导致我们在判断问题是,出现大量失误。

下面是一张过拟合经典的图像:
在这里插入图片描述
绿色就是过拟合的情况,黑色是比较好的情况。

2.评估方法

我们前面一直说模型的效果,那么怎样才能合理地评估模型的效果吗?假设我们没有验证集,没有测试集。只有训练集,相对于老师让你重复做100道题,最后还拿这100道题考你的学习水平,这样肯定不是你真正的水平。如果老师让你练习100道题,每次拿另外10道题(不变的十道)考你,貌似也不太合理。那要怎么做?

答案其实很简单,就是一边训练一边测试(验证),通过训练集和验证集上的效果(比如说准确率),判断是否过拟合了或者欠拟合。不过具体的验证方法有很多。

  • 留出法
  • 交叉验证法
  • 自助法

2.1 留出法

思想:将原始数据划分为训练集验证集(测试集),拿训练集训练,拿验证集验证。
需要注意的是,训练集和验证集的分布最好和原始数据是同分布的,比如,二分类任务中,共1000个样本,其中正样例500,负样例500.按照4:1的比例划分训练集和验证集,训练集应该有400个正样例,400个负样例。验证集应该有100个正样例,100个负样例。

可能会有这样的疑惑:这样不是每次都拿同样的题来测试模型吗,模型和人不一样,人可能会记住测试的题,机器不会,在验证集上,机器只是进行了一次正向运算,并没有通过运算的结果反向修正模型。

优点:简单,比较容易实现。
缺点:(1):即便按照同一比例划分训练集和验证集,划分方式也不一样。比如可以使用前350个正样例,也可以使用后350个负样例,这样划分的结果会使模型的评估不稳定。
(2):如果训练集/验证集比例过大,相对于训练集几乎和原始数据集差不多大小。这样和直接使用原始数据集就没有多大区别了。所以,一般会按照将原始数据集的2/3~4/5作为训练集,其余的做验证集。

2.2 交叉验证法

交叉验证法是将原始数据集划分为k个大小相似的互斥子集。即
D = D1∪D2∪D3∪…∪Dk,Di∩Dj=空集(i≠j)
同时,每个子集保证分布的一致性。
每次使用k-1个子集作为训练集,剩下一个作为测试集。这样,就避免了留出法结果不稳地的缺点。
在这里插入图片描述

与留出法相似,将数据集D划分为k个子集同样有许多种划分方式。为减小因划分不同而造成的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终地评估结果是这p次k折交叉验证的均值。例如常见的”10次10折交叉验证“。此时,要进行100次训练/验证。

特殊的情况:另k=样本个数。则,每次只留下一个样本作为验证。这就是留一法(Leave-One-Out,LOO)留一法就不受样本划分方式的影响了。留一法被认为是评估结果比较准确的一种方法,但是,如果样本数量较多,造成的训练成本会很大。

2.3 自助法

前面提到的方法要么受样本划分的影响(留出法),要么受计算成本的影响(留一法),就没有一种能兼顾的方法吗?

自助法(Bootstrapping):通过自主采样来进行样本的划分。

自处采样:给定有m个样本的数据集D,每次随机从其中选择一个样本,将其拷贝放入样本集D‘,再放回D,重复m次之后,样本集D’也有m个样本了。当然,D‘中会有一些样本被重复出现,也会有一些样本压根没出现过。样本在m次采集中始终不被抽到的概率是:(1-1/m)^m,去极限得:

在这里插入图片描述
这样一来,实际用来训练的数据集和用来测试得数据集都是m个样本,而用来评估的样本中,仍然有1/3的样本是没有在训练集中出现过的。这样的测试结果,也被称为”包外估计“(out-of-bag estimate)

优点:在数据集很小,难以划分训练/测试集时很有用’自助法能从原始数据集中产生多个不同的训练集,这对集成学习等方法有很大好处。
缺点:改变了原始数据集的分布,会引入估计偏差,因此,在原始数据集样本足够多时,留出法和交叉验证法更常用一些。

3.性能度量

前面提到各种事模型效果尽可能稳定可靠的方法,但是,什么才是模型的效果呢?

要知道机器学习的两大任务是分类和回归,对于不同的问题,衡量其效果的方法也不一样。比如,我们分类时希望分类结果和实际结果一样,拟合一个函数是希望误差越小越好。

下面是一些常用的性能指标:

3.1 错误率和精度

错误率是分类错误的样本占样本总数的比例,精度是分类正确的样本占样本总数的比例。对样例集D,错误率为:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.2 查准率,查全率,F1

错误率和精度是比较常用的,但并不总是好用的。比如,我们对一些疑似感染新型冠状病毒的患者进行检查,我们希望宁可把没病的检查为有病,也不希望放过一个真正感染的病例。也就是说我们希望真的感染的人中被检查出来的越多越好。

在其他的一些场景,我们可能希望考虑其他因素了。所以,单纯的准确率和错误率是不够的。

在这里插入图片描述
查准率 P
在这里插入图片描述

查全率 R
在这里插入图片描述
查准率越高代表检查结果为有病的人真的有病的比例越高。查全率越高代表真的有病的人被检查出有病的比例越高。

在很多医学检查上,我们希望查全率越高越好。
注意的是,查准率和查全率往往是矛盾的,即二者不会都很高,往往是一个高另一个就低。这点也很好理解,查全率高的情况下,必然会把很多没病的也检查为有病了(加入你把所有人都判有病,那么查全率100%),这样,查准率就会很低了。通常只有在简单的任务中,才会出现二者均很高的情况。

我们把查准率-查全率绘制成一条曲线,简称”P-R曲线“,如图:
在这里插入图片描述
如果,一个模型的P-R曲线完全包住另一个模型的曲线,我们就说前者的性能优于后者。比如上图的A完全包住C,则认为A比C的性能更好。如果,两个模型的曲线出现了交叉,那么就不好判断了,只能通过具体的查准率和查全率来比较。但是,有时候人们还是希望能比较一下,一个合理的方式是比较二者下面包围的面积,面积越大者越好。但是,面积有时候不好算,所以,又出现了平衡点(Break-Event Point,简称BEP),他是查准率=查全率时的取值,例如上图的C的BEP是0.64,而基于BEP的比较,可以认为A优于B。

但是,BEP还是过于简单,所以,又有了F1
在这里插入图片描述
在这里插入图片描述很多时候我们有多个混淆矩阵,例如进行多次训练/测试,每次都会得到一个混淆矩阵。此时,为了计算整体的效果,又出现了宏查准率(macro-P),宏查全率(macro-R),以及相应的宏F1(macro-F1)
在这里插入图片描述
宏查全率和宏查准率其实就是求均值。

此外,还有微查全率(micro-R),微查准率(micro-P),微F1(micro-F1)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3 ROC与AUC

先定义
真正例率(TPR)(其实和查全率一样)和假正例率(FPR)
在这里插入图片描述
ROC曲线就是TPR-FPR关系图,曲线包围的面积就是AUC:
在这里插入图片描述
一般而言,AUC越大,模型性能越好。

此外,还有很多其他评估的方法,具体涉及到的话再查就可以了,不需要一下子记住所有的评估方法。

4.模型优化

一般而言,模型不可能经过一次完整的训练就是非常好的效果了。往往我们会根据模型在训练集,验证集上的表现来修正模型中的一些参数,再次训练,以使模型达到更好的效果。

比如,之前我们训练8次,现在我们训练16次等等具体也有很多方法,尤其是在深度学习中,调整学习率,epoch,batch_size,等等,都会对模型产生不同的影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值