ML

作者: 奉先 | 来源:发表于2018-08-21 15:34 被阅读14次

2.模型评估和选择

2-1. 经验误差和过拟合

训练误差/经验误差: 学习器在训练样本的上的实际预测值与样本实际值之间的差异叫做训练误差(也叫经验误差)。
泛化误差: 在新样本上的误差叫做泛化误差(完整说法:学习器在新样本的上的实际预测值与样本实际值之间的差异叫做)。
很显然,我们希望得到泛化误差最小的学习器(也就是我们通常所指的机器学习中的模型)。

机器学习的基本原理是,通过对训练集(样本)的学习,把握该类事物的普遍规律,进而对新的样本进行预测。这样引申出2个重要概念。
过拟合: 学习器对训练集进行了过度学习,导致将训练集中个别样本的个别特征,当做了对于所有样本的普遍特征。
欠拟合: 与过拟合刚好相反,学习器还没有对训练集中一般特征进行很好的学习。
下面是书中一个关于 过拟合和欠拟合的实际例子,很形象。

过拟合和欠拟合实例
欠拟合可以通过增加训练样本数,增加计算能力来解决。但是过拟合是无法避免的
为了证明这个结论,需要先介绍两个概念, P和NP问题。 P问题是指可以在多项式时间内解决的问题。NP问题则指,不能在多项式时间内解决的问题。

不存在过拟合这个命题表明:如果一个学习器算法可以保证对训练集的训练误差是0,那么该学习器的泛化误差也是0。对于一个固定的算法来说,它肯定是一个P问题,也就是算法可以在多项式时间内完成。而机器学习中的问题多数是NP难问题。那么,不存在过拟合这个命题,就变成了P = NP,这显然是个谬论。所以一定存在过拟合。

2-2. 评估方法

为了评估学习器在新样本上的评估能力(也就是评估机器学习模型的好坏),我们可以选取一部分"测试集",并得到学习器在这部分"测试集"上的测试误差,并用这个测试误差来估计泛化误差并评估一个学习器的好坏。测试集样本需要与真实样本独立同分布,并且尽可能保证测试样本与训练样本不重复。
这样一来,我们就需要将我们现有的样本集D,分成一个训练集S,和一个测试集T。那么,问题来了,如何分呢?下面是常用的几个方法。

2-2-1. 留出法

留出法,是将样本集划分为两个互斥的子集,其中一个作为训练集S,另个一作为测试集T。训练/测试集的样本尽量保持同分布,例如,我们的训练集包含45%正例和55%的反例,那么测试集也尽量保持这个比例。因为训练/测试样本数直接影响训练/测试的质量,一般地,选择总样本数的2/3 ~ 3/4做为训练样本,剩余作为测试样本。
在保持训练/测试集同分布前提下,我们也有很多种划分S、T的方法,在使用留出法时,会尝试多种不同划分方法,这样也可以产生多个测试集/训练集样本,每一次都可以计算出一个测试误差,把所有这些误差取平均值,就得到最后测试误差。

2-2-2. 交叉验证法

交叉验证法:将数据集D分为k个大小相似的互斥子集,每个子集尽量分布一致。每次使用k-1个集合作为训练集,1个集合作为测试集,这样可以得到k个测试结果,取均值作为测试结果。这种方法也叫做k折交叉验证。如果分成10个组,则称为10折交叉验证。和留出法类似,将D分成k个子集,也有很多种方法。例如,10次10折交叉验证,会得到100个测试误差,取平均作为最后的预估泛化误差。

特殊的,假如D有m个样本,而把D分为m个组,这种情况叫做留一法,每次测试集就一个元素。

2-2-3. 自助法

对于留出法 和 交叉验证法来说,因为从数据集中挑选出一部分集合做为测试集,这样导致训练集样本减少,而留一法,虽然每次只使用一个样本来测试,保留了大部分样本来训练,但是当样本数较多时,计算的代价也是很大的。自助法为了平衡这个矛盾而派上用场。
自助法:假设数据集D中包含m个元素,每次从D中选择一个样本并且放到集合D1中,这个样本在放到D1集合中后,在放回到数据集D中,这样经过m次循环后,D1中也包含m个元素。那么,容易得到,数据集D中的某个样本没被选中放到D1中的概率是 (1 - 1/m)^m 。 那么也就是D中有大概30%(原因见下边公式)的样本没有出现在D1中,那么我们使用D1作为训练集S,使用D\D1作为测试集T。

2-2-4. 调参和模型最终定型

每个机器学习模型都会有很多参数,对于不同的参数来说,也可以说是不同的模型,需要单独学习训练。由于参数可选范围大,为了减少计算消耗,一般选定一个范围,和一个步长,进而选择几个参数来测试。
模型评估与选择中用于评估测试的数据称为验证集,学得模型在实际中遇到的数据称为测试集。使用测试集来评估模型在实际应用的泛化能力,使用验证集来进行模型选择和调参。

2-3. 性能度量

这部分介绍衡量模型泛化能力的评价标准,也就是性能度量。不同指标可以评估模型的“好坏”。

2-3-1. 错误率和精度

这个指标在分类任务(二分或者多分任务)中会经常使用,错误率是指分类错误的样本数占总样本的比例,精度=1-错误率。

2-3-2. 查准率、查全率 和 F1

某些任务需求,需要查看下面两种场景(书中以西瓜为例):
(1) 挑选出来的瓜中,有多少比例是好瓜。
(2) 所有好瓜中,有多少比例被挑选出来了。

2-3-2-1. 定义

在二分类任务中,根据样本的真实情况与学习器预测的情况,将样本划分成真正例(TP true positive),假正例(FP false positive),真反例(TN true negative) ,假反例 (FN false negative)。

查准率、查全率定义
查准率(Precision):
P = TP/(TP+FP)
查全率(Recall):
R = TP/(TP+FN)
当然,样本总数 = TP + FP + TN + FN。

2-3-2-2. P-R图:

在描述查准率和查全率关系时,经常会使用一种PR曲线,通过曲线得到P和R一般是负相关的。那么,PR曲线如何画出呢?
假设,样本集D中有m个样本。 我们将样本按照学习器预测的,该样本是正值的概率来排序(那么,排在前边的是正值的可能性更大)。第一次,将排序第一个样本定为正例,其余m-1个样本定为反例, 这时候能够算出一个(P1,R1);第二次,将排序前2个样本定为正例,其余m-2个样本定为反例, 这时候能够算出一个(P2,R2),依次类推,重复m次(可以自己定义重复多少次,当然重复几次就有几个点),就可以得到m个不同的点,连接起这些点就得到了P-R曲线。书中提供了一个样例P-R图(这个图并不准确,只是反映P-R变化趋势)。

P-R曲线
一般在比较两个曲线(每个曲线代表一个算法模型)时,哪个曲线下面的面积更大,那么哪个曲线更好,上边例子中,明显的曲线A优于曲线C。但是面积并不好计算,所以给出了几个评价P,R的指标。
最简单的指标是平衡点,平衡点(BEP break-event-point)是指P=R的点。更为常用的是F1度量,F1是P和R的调和平均数。

调和平均数是指: 两个数的倒数和的二分之一,再取倒数。也就是说 1/F1 = 1/2(1/P+1/R)。

为了考虑P和R的权重,使用指标来度量。

在实际中,或得到多组P、R混淆矩阵,这时候可以计算 宏查准率、宏查全率、宏F1,实际上就是计算每组的P、R在计算这些P和R的平均值。相对的,就有微查准率、微查全率、微F1指,微指标是先计算 TP、TN、FP、FN的平均值,再根据公式计算P、R和F1 。

2-3-3. ROC与AUC

一般地,学习器会给每一个样本提供一个预测值。对于分类任务中,会设置一个阈值,如果学习器的预测值高于这个阈值,学习器就可以将这个值归类为正例,否则将这个样本归类为反例。
延续上一小节的内容,定义下面两个概念:
1.真正例率 : TPR(True Positive Rate) = TP / (TP+FN)
也就是 TP(预测为真,实际也为真)样本量 除以总的为真的样本量(注意这个分母实际上不变)。
2.假正例率 : FPR(False Positive Rate) = FP / (TN+FP)
也就是 FP(预测为真,实际为假)样本量 除以总的为假的样本量(注意这个分母实际上不变)。

ROC曲线和PR曲线十分类似,只是横坐标改成了假正例率,而纵坐标是真正例率。 ROC曲线的制作方法是:

  1. 学习器对每一个样本预测一个值,并记录下来。
  2. 把这些样本按照学习器的预测值进行排序。
  3. 设定正反例的判断阈值为第一个样本的预测值(小于这个阈值的样本是正例,否则是反例),这样所有的样本都会预测为反例。这时候TP = FP = 0 ,那么得到一个点(0,0)。
  4. 把阈值设置为第二个样本的值,那么第一个样本值将被划分为正例,其余m-1个样本划分为反例,再计算出TPR、FPR,得到第2个点。
  5. 重复上边步骤,直到最后一步,所有样本都被预测为正例,很明显,这时候 TPR = FPR = 1。(因为所有样本都预测为正例,TP将是样本中所有的实际正例,FP是样本中所有的实际反例)。
    ROC曲线
    如上图中,ROC曲线下边包含的面积就叫做AUC,AUC可以表征这个ROC曲线的质量(AUC越大,表名ROC曲线越优)。

AUC的计算方法,笔记详情。

2-3-4. 代价敏感错误率与代价曲线。

之前在考虑错误率时,并没有加上关于在预测错误情况下的代价情况。定义一个

表示,将A类样本预测为B类样本时的代价。

相关文章

网友评论

      本文标题:ML

      本文链接:https://www.haomeiwen.com/subject/fcjdiftx.html