一天一个机器学习小知识——模型评估与选择


前言

本节主要介绍机器学习中常用的一些模型评估方法以及模型性能度量指标。

一、误差的分类

当我们构建并且训练一个模型的时候,我们需要知道这个模型的效果怎么样,这时候就要引入“误差”的概念。机器学习中误差主要分为两种:

1.训练误差

训练误差又称经验误差,表示模型在训练集上的误差

2.测试误差

测试误差又称泛化误差,表示模型在测试集上的误差
在实际应用中,我们主要关注的是泛化误差。对于经验误差很低,但是泛化误差很高的情况我们称之为“过拟合”,而经验误差和泛化误差都很高的情况我们称之为“欠拟合”

二、评估方法

由上一小节可知,评判一个模型的好坏主要看其在测试集上的误差,因此我们需要把数据集划分为训练集和测试集。目前的划分方法主要有三种:

1.留出法

简单的将数据集D划分为两个互斥(不重合)的集合,其中一个作为训练集S,另一个作为测试集T,使用S来训练模型,然后用T来评估其测试误差,作为泛化误差的估计。

2.k折交叉验证法

先将样本集划分成k个互不相交的子集 D i , i = 1 , 2 , . . . , k D_{i}, i=1,2,...,k Di,i=1,2,...,k(最好使用分层抽样的想法,这样每个子集都能够尽可能保持数据分布的一致性);然后每次使用其中k-1个子集的并集作为训练集,剩余的一个子集作为测试集,这种就得到了k组训练/测试集;最后分别使用k组数据进行k次训练和测试,得到k个测试误差,并将其均值作为最终的测试误差。这里引用一下周志华老师的图片。
一天一个机器学习小知识——模型评估与选择

3.自助法(bootstrap)

不管是留出法还是交叉验证法,都是抽取其中部分样本作为训练集进行训练,如果原始数据集的样本量较少,这种方法得到的训练集样本会过少从而不再适用,此时自助法(bootstrap)是一种可行的解决方法。bootstrap其实是一种有放回抽样,其主要步骤是每次从样本有放回的抽取一个样本,重复n次(n一般等于原始样本量,也可以不等),这样就得到了一个规模为n的训练集S。可以看到原始样本中会有部分样本被重复选中,而部分样本没有被抽到,选择没有抽到的那部分样本作为测试集T,最终可以证明(使用重要极限公式)T的样本量大概为原始样本量的1/3。
综上所述,在数据量较大的时候应该选择留出法或者交叉验证,数据量较小的时候可以考虑一下自助法(bootstrap),留出法和k折交叉验证的主要区别在于,留出法将数据集划分为2个,并且只进行一次训练和测试,而k折交叉验证则将数据集划分为k个,并且进行k次训练和测试,取k个测试结果的平均作为最终的测试结果。

三、性能度量

上面多次提到了“误差”,但是误差是一个很泛的词,如何将其进行量化?这里根据模型是回归问题还是分类问题,分别介绍了几种常见的度量。

1.回归问题的度量

回归问题的主要特点是模型输出是一个连续值,最常用的度量指标是“均方误差(MSE)”
m s e = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 mse=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(\boldsymbol{x}_{i}\right)-y_{i}\right)^{2} mse=m1i=1m(f(xi)yi)2
其中 f ( x i ) f(x_{i}) f(xi)是模型的预测值, y i y_{i} yi是真实值。

2.分类问题的度量

分类问题的主要特点是模型输出是一个离散值,比较常用的指标是准确率
1-准确率:分类正确的样本数占总样本数的比例。
a c c = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) acc=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) = y_{i}\right) acc=m1i=1mI(f(xi)=yi)
在一些特定场景下,准确率有时候不是一个很合适的指标,此时引入查准率、查全率。
2-查准率:通俗来说就是检索出的信息中有多少比例是用户感兴趣的。
P = T P / ( T P + F P ) P = TP / (TP + FP) P=TP/(TP+FP)
3-查全率(召回率):通俗来说就是用户感兴趣的信息中有多少被检索出来了
R = T P / ( T P + F N ) R = TP / (TP + FN) R=TP/(TP+FN)
一天一个机器学习小知识——模型评估与选择
查准率和查全率是一对矛盾的度量,一般查准率高时,查全率低;反之,查全率高。比如在推荐系统中,如果想要提高查准率,那么这时候我只推荐最有把握的一种商品,这时候P就会接近100%,但是查全率会接近0%,因为只推荐一种的话,其余大部分都没有推荐出来,所以查全率会接近0。而如果想要提高查全率,那么可以向用户推荐全部商品,这时候查全率是100%,但是查准率会很低。
查准率和查全率在不同场景中的重视程度不同,比如在商品推荐系统中,为了尽可能少打扰客户,能希望内容是用户感兴趣的,此时查准率更重要;在银行信用风险监控中,更希望尽可能找出所有违规操作,此时查全率更重要。
在样本不平衡的情况下,准确率也失去其指导意义,比如在信用卡风险识别中,有1000个识别客户,其中999个是低风险的,只有一个是高风险的,此时模型只要简单的把客户全部归类为低风险,模型的准确率就能达到99.9%,但是模型并没有学到任何东西。对于这种样本极不平衡的情况,一般采用ROC和AUC这两个度量指标。
1-ROC:首先按预测结果为正样本的概率进行排序,越是排在前面的样本越可能为正样本;然后按顺序逐个将样本预测为正样本,TPR(真正率)和FPR(假正率);最后以TPR为纵轴,FPR为横轴,得到一条曲线即为ROC曲线
T P R = T P T P + F N \mathrm{TPR}=\frac{T P}{T P+F N} TPR=TP+FNTP
F P R = F P T N + F P \mathrm{FPR}=\frac{F P}{T N+F P} FPR=TN+FPFP
为什么ROC曲线就不受样本不平衡的影响了呢?
这主要跟他的计算方式有关,假设负样本增加为原来的100倍,此时样本变得极不平衡,观察ROC曲线的变化。首先看TPR,分子是预测为正例并且真实也为正例的样本数,分母是全部的正例样本数,都与负样本没有直接关系,所以TPR不会发生变化;对于FPR来说,分母变为100*(FP+TN),给定学习器和阈值,因为假设增加的数据与原数据独立同分布,那么大于这个阈值的负样本(label为负)也会变为原来的100倍,即100*FP。所以FPR也不变。
2-AUC:AUC是ROC的量化结果,它等于ROC曲线下方的面积。

一天一个机器学习小知识——模型评估与选择

总结

本文主要介绍了模型的评估方法以及使用的度量指标,以及相应的适用场景,虽然相对比较简单,但却是机器学习中比较重要的一个环节,如果选择了错误的评估方法以及不恰当的度量指标,那么后续的模型改进和调参也就失去了意义。