第二章 模型评估与选择

上一章,简略地介绍了机器学习,以及数据集、数据集、测试集、假设空间、版本空间等等的相关概念。这一章就开始讲模型评估与选择了,因为书上是以“学习器”来称呼模型的,所以下面我也用学习器来进行说明总结。

什么是经验误差?
在分类样本时会出现分类错误,我们把分类错误的样本数占样本总数的比例称为“错误率”精度即正确率,自然是1-错误率了。学习器的实际预测输出与样本实际输出之间的差异就称为“误差”,于训练集就是“经验误差”,于新样本就是“泛化误差”

什么是过拟合?
我们希望学习器能在新样本的预测中有更好的效果,即泛化性能最大化。但在学习过程中,往往会把训练集中的样本学得过多,使得泛化降低,就是说学到了训练样本个体的特点而不是总体样本的特点,或者说学了这个训练集的特殊点,相对于所有潜在的样本来说的特点。这就是“过拟合”,那么与过拟合相对的就是“欠拟合”,反而思之,便是学得不到位,样本的一般性质都掌握不了!

因为过拟合无法避免,所以我们想要去减少它的风险。其实就是对模型的泛化误差进行评估,然后选择泛化误差最小那个。
对多种学习算法、参数配置进行选择即模型选择:
一个学习算法→不同参数配置→不同模型

评估方法

在实验测试中,只有数据集可用,为了对学习器的泛化误差进行评估,只能从数据集(验证集)中分离出训练集与测试集,测试集用于测试学习器对新样本的判别能力,将测试集上的“测试误差”作为泛化误差的近似。故测试集要尽可能与训练集互斥

1. 留出法

直接将数据集划分两个互斥的集合,一个作训练集,一个作测试集。训练集、测试集的划分要尽可能保持数据分布一致性。即保持训练集和测试集中样本类别比例相差不大,否则会产生偏差。一般确定训练集与测试集的样本比例之后,对于数据集的样本划分的方法也有很多,不同划分方法造成模型评估结果也不同,所以就要进行多次留出法,随机划分重复评估再取平均值作为评估结果。对于留出法,其划分样本于训练集与测试集的比例要适当,若是训练集含有大多数样本,那么其模型结果便与数据集训练出来的模型接近,但是由于测试集样本过少,其评估结果就不那么准确,反之也是一样的道理。故常常采取2/3~4/5的样本作为训练集,其余作为测试集。

2. 交叉验证法(k折交叉验证)

将数据集划分为k个大小相似的互斥子集,即互不包含。每个子集尽可能保持数据分布的一致性,即通过分层采样得到。这k个子集又分出k-1个作为训练集,剩下一个作为测试集,可以分k次,进行k次训练和测试,最终也是求其结果的均值。同留出法,交叉验证法要随机使用不同的划分重复多次,最终结果是多次k折交叉验证结果的均值。比如“10次10折交叉验证”就会有100次训练,有100个训练结果(模型)。
交叉验证法有一个特例,其名为留一法,就是数据集有多少个样本,就划分成多少个子集,即每个子集一个样本,于是随机划分只会产生一种结果,所以这种方法被实际评估的模型与期望评估的用数据集训练出来的模型很相似。其缺点是当数据集很大的时候,用它就需要庞大的计算量(还未考虑调参)。

3. 自助法

上面两种方法是需要将数据集划分的,这样自然会让用训练集训练出的模型用数据集训练出来的模型有一定的估计偏差。如此,自助法以自助采样法为基础,简单地讲就是重复随机抽样,从数据集D中进行重复随机抽样m次,便会得到一个含有m个样本的数据集D1,这就是自助采样的结果。
对于样本在m次不被采集到的概率:

=

这说明了,D中大概有36.8%的样本没有出现在D1中。于是我们可以把D1作为训练集,把那约36.8%的样本作为测试集。其优点是对于数据集较小、难以有效划分训练时很有用,其缺点就是改变了初始数据集的划分,这可能会引入估计偏差。

调参与最终模型

什么是调参?
上面粗略地提到过参数的调整,我们在进行模型的评估和选择时,不仅要对学习算法进行选择,还要对算法参数进行设定,这便是调参。
梳理一下:

机器学习中大概有如下步骤
确定模型----训练模型----使用模型。
模型简单说可以理解为函数
确定模型是说自己认为这些数据的特征符合哪个函数。
训练模型就是用已有的数据,通过一些方法(最优化或者其他方法)确定函数的参数参数确定后的函数就是训练的结果使用模型就是把新的数据代入函数求值

参阅自:机器学习为什么需要训练,训练出来的模型具体又是什么?
回到调参,对于每种参数都训练出模型是不现实的,我们应对每个参数选定一个范围和步长,选出的参数即为候选参数值(一般10个以内),最终从这些候选参数值中产生选定值。这是一种折中的结果,是为了使学习过程成为可能。
然鹅,尽管我们得到了这个模型,但这不是最终提交给用户的模型,我们需要对数据集重新训练,使用全部样本以训练出的模型,才是最终模型。

习得模型在实际遇到的数据称为测试数据;模型评估与选择中用于评估测试的数据称为"验证集"。例如:在研究对比不同算法的泛化性能时,用测试集上的判别效果来评估模型在实际使用中的泛化性能,而把训练数据分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。

性能度量

是衡量模型泛化能力的评价标准。其反映了任务需求。对于给定的样例集D={(x1,y1),(x2,y2),...,(xm,ym)},其中的y是x的真实标记,现在要评估学习器f的性能,于是把f的结果与y进行比较。
回归任务——性能度量——“均方误差”

= .

一般的,对于数据分布和概率密度函数p(·),均方误差可以表示为:

.

下面主要介绍分类任务中常用的性能度量

错误率与精度

上面这两种就是分类任务中常用的性能度量啦!对于样例集D,分类错误率定义如下:

.

【注:Ⅱ(·)是指示函数。若·(即对括号内进行逻辑判断)为则取值为1则取0
精度定义:

.

一般的:

.                             #错误率
.    #精度

查准率、查全率与F1(查准需要的是比例高,查全需要的是数量全)

对于真实类别与学习器预测类别的异同,我们可以分为真正例、假反例、假正例、真反例,分别称为TP、FN、FP、TN(T=True,F=False,P=Positive,N=Negative)。这里的真假是针对学习器预测结果来说的。
于是查准率P与查全率R定义如下:

,
.

两个性能度量是矛盾的,呈负相关
我们常常根据学习器的预测结果对样例进行排序,把“最可能”是正例的放在前面。按这个顺序,逐个把样本作为正例进行预测,每次都可以计算出当前的查准率与查全率,然后以查准率为纵轴,查全率为横轴,作P-R图如西瓜书p31
若一个学习器的P-R图完全包含了另一个,则说明前者性能更优于后者。
但往往会出现不完全包含,出现交叉的情况,那么我们一般用F1来对比衡量。
在说F1度量之前,先说一下平衡点。
平衡点(BEF)是综合考虑查准率与查全率的性能度量。是“查准率 = 查全率”时的取值。是一种简单的度量。
F1度量:

.→.

一般形式:

→.

其中>0度量了查全率对查准率的相对重要性>1时,查全率有更大的影响,<1时,查准率有更大的影响。

上面提及到的性能度量的平均值(在各混淆矩阵(其实就是上面真假正反例的矩阵)上分别计算出查准率与查全率,再计算平均值)称为“宏查准率”(macro—P)、“宏查全率”(macro—R)以及"宏F1"(macro—F1),前两个均值就是算术平均的计算方式,相加除以n,最后一个则是根据前两个计算得来,参考上面F1的定义。
上面是一种做法,也可以把混淆矩阵的真假正反例进行平均,则有、、、,于是可求出“微查准率”(micro—P)、“微查全率”、“微F1”。然后你懂的,参考上面写的相关公式,代入即可。

ROC曲线与AUC

ROC全称是“受试者工作特征曲线”,根据预测结果对样例进行排序,然后按顺序逐个把样本作为正例进行预测,以每次计算出的“真正例率”(TPR)作为纵轴,“假正例率”(FPR)作为横轴。两者定义如下:

,

ROC曲线下的面积即为AUC,是用来比较当两个学习器的ROC曲线相交不完全包含,要进行性能比较时,则使用AUC。AUC的估算

.

其与排序误差有紧密联系,于是给定个反例,个正例,令和分别表示反例、正例的集合。则排序损失定义为:

对应的是ROC曲线之上的面积,由此有:.

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

为何引入代价?
因为.......你这样做是要付出代价的!即为所造成结果的超额处理。引入代价是为了衡量不同类型错误所造成不同的损失,可为错误赋予“非均等代价”.
代价矩阵

真实类别 预测类型 ---
--- 第0类 第1类
第0类 0
第1类 0

其中表示将第i类样本预测为第j类样本的代价。例如上矩阵中,损失程度相差越大,与值的差别越大,比较一般是以代价比值而非绝对值。(即倍数关系)

从前面提到的性能度量,均是在假设均等代价前提下进行计算的,如今引入了非均等代价,便要对其考虑在内。
于是将上面代价矩阵中的第0类作正例,第1类作反例,而与分别表示正例子集和反例子集,则以错误率为例子,“代价敏感”错误率为:

除此之外,若令中的不限取0和1,则可定义出多分类任务的代价敏感性能度量。
那么在非均等代价下,ROC曲线无法直接反映学习器的期望总代价,于是我们引入“代价曲线”,其横轴是取值为[0,1]的正例概率代价:

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

其中FNR=1-TRP。ROC曲线上的每一点对应代价平面上的一条线段,若ROC曲线上一点为(FPR,TPR)则对应一条从(0,FPR)到(1,FNR)的线段,于是所有线段的下界围成的面积即为在所有条件下学习器的期望总体代价。

比较检验

有了实验评估方法和性能度量之后,便是对学习器的泛化性能进行比较。此时为了对学习器进行适当的比较,统计假设检验为我们进行学习器性能比较提供了重要依据。该节默认以错误率为性能度量。

假设检验

1. 二项检验

2. t检验

交叉检验t检验
McNemar检验
Friedman检验与Nemenyi后续检验

偏差与方差

你可能感兴趣的:(第二章 模型评估与选择)