AI工程师成长之路--机器学习之模型评估与选择

  1. 云栖社区>
  2. 博客>
  3. 正文

AI工程师成长之路--机器学习之模型评估与选择

庄东岳 2018-10-06 12:24:37 浏览1389
展开阅读全文

机器学习之模型评估与选择

开篇简介:本文是博主结合前辈经验和自身的认识写的博文,有不少博主自身理解还不太透彻,因为考虑到文章的完整性,有些部分需要引用的前辈的一些方法,望谅解。由于文章专业化内容过多,会影响阅读体验,在这里建议大家难以理解的部分先不要去深究,等待需要用到的时候再去深入研究一下。本博文大家可以先保存以后用到时候当做资料参考,希望能帮助到大家一点点。

1.误差与拟合

错误率 = a个样本分类错误/m个样本

精度 = 1 - 错误率

误差:模型的预测输出与真实值之间的差异

训练误差:通过已知的样本数据进行学习,从而得到模型的过程,这个过程中产生的误差

泛化误差:具体、特殊到一般的过程称为泛化。对机器学习模型来说,泛化是指模型作用于新的样本数据(非训练集),这个过程产生的误差

欠拟合和过拟合

过拟合:某个模型在训练集上表现很好,在新样本上表现差,导致一些非普通规律被模型接纳和体现,反之称为欠拟合,即模型对训练集的一般性质学习较差

模型选择可以通过分析、评估模型的泛化误差,选择泛化误差最小的模型

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.模型的评估方法

(评估思路:因为待测数据集全集几乎拿不到,我们使用测试集进行泛化测试,用测试误差即为泛化误差的近似)

注意点:测试集和训练集尽可能互斥,测试集和训练集独立同分布

2.1留出法

留出法:将已知数据集分成两个互斥的部分,其中一个用来训练模型,另一个部分用来测试模型,评估其误差,作为泛化误差的估计。

注意点:两个数据集的划分要尽可能的保持数据分布一致性,避免因数据划分过程引发的偏差。

下面看个例子:

在只有一个包含m个样例的数据集D,从中产生训练集S和测试集T。

D分为两个互斥的集合,一个作为S,一个作为T。

分层采样:S和T中正例和反例比例一样。

例如D包含500个正例,500反例。分层采样获得含70%样本的S,有350正例,350反例;30%样本的T,有150正例,150反例。

一般采用随机划分、重复进行实验评估后取平均值作为留出法的评估结果

例如,进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后得到100个结果,而留出法返回的则是这100个结果的平均。

弊端:T比较小,评估结果不够稳定准确,偏差大。

常见将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.2交叉验证法(留一法)

将D划分为k个大小相似的互斥子集。(D通过分层采样得到每个子集Di,保持数据分布一致性)。每次用k-1个子集的并集作为训练集,余下那个作测试集。即可获得K组训练/测试集,进行K次训练和测试,最终返回k个测试结果的均值。也称”k折交叉验证”。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

为减小因样本划分不同而引入的差别,k折交叉验证要随机使用不同的划分重复p次,最终评估结果是这p次k折交叉验证结果的均值,即进行p*k次训练/测试。

留一法:K可以根据实际情况设置,充分利用了所有样本,多次划分,评估结果相对稳定。m个样本划分成m个子集,每个子集包含一个样本。留一法中被实际评估的模型与期望评估的用D训练出来的模型很相似,因此,留一法的评估结果往往被认为比较准确。

留一法缺陷:数据集较大,计算比较繁琐,需要进行K次训练和评估。例如,数据集包含100w个样本,则需训练100w个模型。且留一法的估计结果未必比其他评估法准确。

2.3自助法(有放回的抽样测试

试样本量较小的时候可以通过自助法产生多个自助样本集,且有约36.8%的测试样本。

例如:从m个样本的数据集D,随机采样(选)一个样本,拷贝入训练D’,放回,继续随机挑选,直至m次。

样本在m次采样中始终不被踩到的概率(1-1/m)^m。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

实际评估的模型与期望评估的模型都使用m个训练样本,而仍有约1/3的没有在训练集的样本用于测试。

自助法在数据集较小、难以有效划分训练/测试集时很有用。在初始数据量足够时,留出法和交叉验证法更常用。


2.4调参与最终模型

①选择适合的学习算法

②对算法参数进行设定,调参


3.性能度量

性能度量:评价模型泛化能力的标准,对不同的模型有不同的评价标准。回归模型的性能度量通常选用均方误差。

给定样例集D={(x1,y1),(x2,y2),……,(xm,ym)},yi是对xi的真实标记,要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。

均方误差:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

数据分布D和概率密度函数p(.),均方误差:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.1分类算法常用的性能度量

错误率:分类错误的样本数占样本总数的比例。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

精度:分类正确的样本数占样本总数的比例。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

数据分布D和概率密度函数p(.)。

错误率:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

精度:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.2查准率、查全率与F1

二分类

True positive 真正例

False positive 假正例

True negative 真反例

False negative 假反例

TP+FP+TN+FN = 样例总数

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

查准率P

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

查全率R

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

通常,查准率高时,查全率偏低;查全率高时,查准率偏低

例如,就拿抽奖来说,想要抽到大奖可以通过多抽几次,普遍撒网来实现,这样查准率就会低;

若希望一次或两次就中到大奖,这会凭借经验和方法抽的次数少了,可能准确率上来了,但是查全率就低了。

世界万物皆是如此。就像省力就会费距离,省距离就会费力,这是不可避免的问题。

学习器把最可能是正例的样本排在前面。按此排序,把样本作为正例进行预测,根据P-R绘图。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

如果一个学习器的PR曲线A的曲线包住了C的曲线,则可以认为A的性能优于C。

如果有交叉,如A、B,期望PR双高,综合考虑PR性能。

引入平衡点(BEP如图箭头所示),基于BEP比较,A优于B。

更常用的是F1度量:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

Fβ :F1的一般形式,能让我们表达对查准率/查全率的不同偏好。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

β>0度量了查全率对查准率的相对重要性;β=1退化为F1;β>1查全率有更大影响;β<1查准率有更大影响。

 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在混淆矩阵上分别计算查准率和查全率,在计算平均值,得到宏查准率,宏查全率,以及宏F1。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,记为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,在计算出微查准率,微查全率,以及微F1。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.3 ROC AUC

最可能是正例的样本排在前面,按此排序。排序中某个截断点,前一部分判断正例,后一部分为反例。不同任务中根据需求划分截断点;重视查准率,靠前位置截断;重视查全率,靠后位置截断。

ROC:纵轴:真正例率TPR;横轴:假正例率FPR

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

现实中,有限个测试样例绘制ROC,不可能光滑。只能像右图一样。

前一个标记点坐标为(x,y),当前若为真正例,则标记为;假正例,用线段连接。


若一个学习器的ROC曲线被另一个包住,后者的性能能优于前者;若交叉,判断ROC曲线下的面积,即AUC。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m+个正例,m-个反例,令D+和D-分别表示正、反例集合,则排序”损失”定义为

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

Lrank对应ROC曲线之上的面积:若一个正例在ROC曲线上标记为(x,y),则x恰是排序在期前的所有反例所占比例,即假正例,因此:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

代价矩阵:

costij表示将第i类样本预测为第j类样本的代价。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

非均等代价下,希望总体代价最小化。


若假设第0类为正类,1为反类。D+代表例集正例子集,D-反例子集,则代价敏感错误率为:

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在非均等代价下,ROC不能直接反应出学习器的期望总体代价,代价曲线可以。横轴为[0,1]的正例函数代价

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

FPR假正例率,FNR=1-TPR假反例率。

ROC每个点,对应代价平面上一条线。

例如,ROC上(TPR,FPR),计算出FNR=1-TPR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,所有条件下学习器的期望总体代价。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

按照图来看,最终总体代价越来越小。(学习器,不断进步!)


4.比较检验

默认以错误率为性能度量,用ε表示。

4.1假设检验

假设检验的例子:

1)二项式检验

有很多随机性在里面,不能一次就确定合不合格

2)T检验

多次重复留出法或是交叉验证法等进行多次训练/测试,得到多个测试错误率。

下面详细介绍一下

学习器泛化错误率,并不能测量;只能获知其测试错误率wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==。泛化错误与测试错误率未必相同,但两者接近的可能性比较大,因此,用后者估推出泛化错误率的分布。

泛化错误为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==的学习器在一个样本上犯错的概率是wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==;测试错误率wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==意味着在m个测试样本中恰有wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==*m个被误分类。

包含m个样本的测试集上,泛化错误率为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==的学习器被测得测试错误率为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==的概率:

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==即为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

给定测试错误率,则解wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==可知,wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==时最大,wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==增大时wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==减小。符合二项分布。

例如,wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw===0.3,则10个样本中3个被误分类的概率最大。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

①我们根据图表粗略估计ε0,比如这幅图当中ε0可取5,6,7都可以,然后求出总体概率α,我们把大多数样本分布的区间1-α称为置信区间,所以只要不超过ε0,即在置信度下就是符合条件的假设 ,否则被抛弃,即在α显著度下。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


②t检验

多次重复留出法或是交叉验证法等进行多次训练/测试,得到多个测试错误率。

平均测试错误率μ和方差σ²为

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

考虑到这k个测试错误率可看作泛化错误率wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==的独立采样,则变量

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

服从自由度为k-1的t分布。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

当测试错误率均值为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==时,在1-α概率内观测到最大的错误率,即临界值。

双边假设,阴影部分各有α/2的面积;阴影部分范围为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

若平均错误率μ与wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==之差|μ-wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==|位于临界值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==范围内,则可认为泛化错误率为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,置信度为1-α;否则,认为在该显著度下可认为泛化错误率与wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==有显著不同。

   wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4.2 交叉验证t检验

对不同学习器的性能进行比较。

两个学习器A、B,若使用k折交叉验证法得到的测试错误率分别为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,其中wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==是在相同的第i折训练/测试集上得到的结果,可用k折交叉验证”成对t检验”来进行比较检验。wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,使用相同的训练/测试集的测试错误率相同,两个学习器性能相同。

k折交叉验证产生k对测试错误率:对没对结果求差wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==;若性能相同则是0。用wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,t检验,计算差值的均值μ和方差σ²。

若变量wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==小于临界值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,则认为两个学习器的性能没有显著差别;否则,可认为两个学习器性能有显著差别,错误平均率小的那个学习器性能较优。


5*2交叉验证

假设检验的前提:测试错误率均为泛化错误率的独立采样。

因样本有限,加查验证不同轮次训练集有重叠,测试错误率实际上不独立,会导致过高估计假设成立的概率。5*2交叉验证,可缓解这一问题。

5*2交叉验证,5次2折交叉验证。A、B第i次2折交叉验证产生两对测试错误率,对它们分别求差,得到第1折上的差值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==和第2折上的差值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==。为缓解测试错误率的非独立性,仅计算第一次2折交叉验证的结果平均值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

对每次结果都计算出方差wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

变量wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==服从自由度为5的t分布,其双边检验的临界值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

当α=0.05时为2.5706;α=0.1是为2.0150。

4.3 McNemar检验

列联表:估计学习器A、B的测试错误率;获得两学习分类结果的差别,两者都正确,都错误或者一个正确一个错。

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

若假设A、B学习器起能相同,则应由e01=e10,那么|e01-e10|应服从正态分布。McNemar检验考虑变量wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==,服从自由度为1的wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==分布,即标准正态分布变量的平方。给定显著度α,当以上变量值小于临界值wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==时,认为两学习器性能没有显著差别;否则性能又显著差别。当α=0.05时为3.8415;α=0.1是为2.7055.


4.4 Friedman检验与 Nemenyi后续检验

①一组数据集上对多个算法进行比较,基于算法排序的Friedman检验。

假定用D1、D2、D3、D4四个数据集对ABC进行比较,由好到怀排序,并赋予序值1,2,……

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

性能相同,平均序值应当相同。

假定N个数据集上比较k个算法,令ri表示第i个算法的平均序值。简化考虑不考虑平分均值的情况,则ri的平均值和方差分别为。

变量

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==在k和N都较大时,服从自由度为k-1的wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==分布。

上述为原始Friedman检验,过于保守,现在通常使用变量wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

其中wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==由原式得到wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==。服从自由度为k-1和(k-1)(N-1)的F分布。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

若”所有算法的性能相同”这个假设被拒绝,说明算法的性能显著不同。


②Nemenyi后续检验

进行”后续检验”来进一步区分个算法,常用的有 Nemenyi后续检验。

Nemenyi检验计算出平均序值差别的临界值域

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==  


下表给出α=0.05和0.1时常用的qα值,若两个算法的平均序值之差超出了临界值域CD,则以相应的置信度拒绝”两个算法性能相同”这一假设。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==大于α=0.05时的F检验临界值5.143,因此拒绝”所有算法性能相同”这个假设;用Nemenyi后续检验,选择k的q,根据式算出CD,可知算法两两之间是否有显著差别。


根据上面表2.5绘制出Friedman检验图。

  wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

横轴:平均序列,每个算法用原点表示平均序列,横线表示临界值域大小。从图中观察,若两算法横线段有交叠,说明没有显著差别。例如图中,算法A和B没有显著差别,而算法A优于算法C,无交叠区。


5.偏差、方差、噪声

偏差-方差分解:解释学习算法泛化性能的一种重要工具。

偏差:判断样本拟合的好不好,体现最终结果和实际结果的差异。偏差越小,和真实值越接近。

对测试样本x,令yD为x在数据集中的标记,y为x的真实标记,f(x;D)为训练集D上学得模型f在x上的预测输出。

以回归任务为例,学习算法的期望预测为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

使用样本数相同的不同训练集产生的方差为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

噪声:真实标记与数据集中的实际标记间的偏差。通常由多种因素综合造成,不可去除。

噪声为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

期望输出与真是标记的差别成为偏差(bias),即wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


假定噪声期望为0,通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

即泛化误差可分解为偏差、方差与噪声之和。

范围性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。


方差:判断模型的稳定性,体现的是整体水平波动。方差越小,结果稳定性越好。

偏差和方差是有冲突的。

训练不足时,由偏差主导泛化误差;训练充足时,有方差主导泛化误差。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

本文参考了众多前辈的经验,望指点与更正,若有侵权,请告知博主,谢谢!

网友评论

登录后评论
0/500
评论
庄东岳
+ 关注