《机器学习》——第2章 模型评估与选择

2.1 经验误差与过拟合

错误率:分类错误的样本数占样本总数的比例。即如果在m个样本中有a个样本分类错误,则错误率E= a/m;相应的,1 - a/m称为“精度”,即“精度= 1 - 错误率”。

误差:学习器的实际预测输出与样本的真实输出之间的差异,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”。

我们希望学习器能在新样本上表现得很好,为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。

过拟合:训练样本自身特点当做所有潜在样本都会具有的一般性质,导致泛化性能下降。过拟合原因,最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了。过拟合是无法彻底避免的。

欠拟合:训练样本的一般性质尚未学好。欠拟合的原因,通常是由学习能力低下而造成的。

下图是过拟合、欠拟合的直观类比:

2.2 评估方法

我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此需要使用“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。测试集应尽可能与训练集互斥,测试集样本尽量不在测试集中出现、未在训练过程中使用。

已知我们需要互斥的训练集和测试集,下面将介绍几种常见的对单个数据集进行处理,使其产生一个训练集和一个测试集的方法。

2.2.1 留出法

“留出法”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。如果从采样角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。

单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

局限性:我们希望评估的是用D训练出的模型的性能,但留出法需划分训练/测试集,这会导致若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确;若令训练集T多包涵一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性。这个问题没有完美的解决方法,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.2.2 交叉验证法

“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D_{1} \cup D_{2} \cup \ldots \cup D_{k}, D_{i} \cap D_{j}=\varnothing(i \neq j)。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k -1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”。k最常用的取值是10,此时称为10折交叉验证;其他常用的k值有5、20等。下图给出了10折交叉验证的示意图:

留一法:假定数据集D中包含m个样本,令k = m。留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集——每个自己包含一个样本;留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。

缺陷:数据集比较大时,训练m个模型的计算开销可能是难以忍受的,而这还是在未考虑算法调参的情况下。另外,留一法的估计结果也未必永远比其他评估方法准确。

2.2.3 自助法

“自助法”以自助采样法为基础:给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D’。

显然,D中有一部分样本会在D’中多次出现,而另一部分样本不出现。可以做一个简单地估计,样本在m次采样中始终不被采到的概率:

即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D'中。于是我们可将D'用作训练集,D\D'用作测试集;这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试。这样的测试结果,称为“包外估计”。

自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用。

2.2.4 调参与最终模型

参数调节(调参):进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定。

我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”。

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的试验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

回归任务最常用的性能度量是“均方误差”

E(f ; D)=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(\boldsymbol{x}_{i}\right)-y_{i}\right)^{2}

更一般的,对于数据分布D和概率密度函数p(·),均方误差可描述为:

E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}}(f(\boldsymbol{x})-y)^{2} p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}

2.3.1 错误率与精度

错误率与精度是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对于样例集D,分类错误率定义为

E(f ; D)=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right)

精度则定义为

\begin{aligned} \operatorname{acc}(f ; D) &=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right)=y_{i}\right) \\ &=1-E(f ; D) \end{aligned}

更一般的,对于数据分布D和概率密度函数p(·),错误率与精度可分别描述为:

E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}

\begin{aligned} \operatorname{acc}(f ; \mathcal{D}) &=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x})=y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \\ &=1-E(f ; \mathcal{D}) \end{aligned}

2.3.2 查准率、查全率与F1

分类结果混淆矩阵:

查准率P和查全率R:

\begin{array}{l} P=\frac{T P}{T P+F P} \\\\ R=\frac{T P}{T P+F N} \end{array}

查准率和查全率是一对矛盾的度量,一般查准率高时,查全率偏低;而查全率高时,查准率往往偏低。

我们可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”。

在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如图中A优于C;如果两个学习器曲线发生交叉,例如A与B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。

“平衡点”(BEP)是一个用于综合考虑查准率、查全率的性能度量,它是“查准率=查全率”时的取值。

F1度量是比BEP更复杂的度量:

F1度量的一般形式——Fβ能表达出对查准率/查全率的不同偏好:

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

当我们有多个二分类混淆矩阵时,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率。

一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P1,R1),(P2,R2),...,(Pn,Rn),再计算平均值,这样就得到“宏查准率”(macro-P)、“宏查全率”(macro-R),以及相应的“宏F1”(macro-F1):

还可先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为\overline{TP}\overline{FP}\overline{TN}\overline{FN},再基于这些平均值计算出“微查准率”(micro-P)、“微查全率”(micro-R)和“微F1”(micro-F1):

2.3.3 ROC 与 AUC

学习器为测试样本产生一个实质或概率预测,然后将这个预测值与一个分类阈值进行比较,若大于阈值则分为正类,否则为反类。

ROC全称是“受试者工作特征”曲线,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。

ROC曲线的纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR),两者定义分别为:

现实任务中通常是利用有限个测试样例来绘制ROC图,此时只能获得有限个坐标对,无法产生光滑ROC曲线。

进行学习器的比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时进行比较,比较合理的判据是比较ROC曲线下的面积,即AUC:

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

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”。

代价矩阵如下,其中costij表示将第i类样本预测为第j类样本的代价。

在非均等代价下,ROC曲线不能直接反应出学习器的期望总体代价,而“代价曲线”则可达到该目的。代价曲线图的横轴是取值为[0,1]的正例概率代价:

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

ROC曲线上的每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR,FPR),则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价:

2.4 比较检验

统计假设检验为进行学习器新能比较提供了重要依据。

2.4.1 假设检验

“假设”是对学习器泛化错误率分布的某种判断或猜想。泛化错误率为\varepsilon的学习器被测得测试错误率为\hat{\varepsilon }的概率:

P(\hat{\epsilon} ; \epsilon)=\left(\begin{array}{c} m \\ \hat{\epsilon} \times m \end{array}\right) \epsilon^{\hat{\epsilon} \times m}(1-\epsilon)^{m-\hat{\epsilon} \times m}

平均测试率和方差为:

\begin{array}{c} \mu=\frac{1}{k} \sum_{i=1}^{k} \hat{\epsilon}_{i} \\\\ \sigma^{2}=\frac{1}{k-1} \sum_{i=1}^{k}\left(\hat{\epsilon}_{i}-\mu\right)^{2} \end{array}

考虑到k个测试错误率可看作泛化错误率\varepsilon _{0}的独立采样,则变量

\tau_{t}=\frac{\sqrt{k}\left(\mu-\epsilon_{0}\right)}{\sigma}

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

2.4.2 交叉验证t检验

2.4.3 McNemar检验

2.4.4 Friedman检验与Nemenyi后续检验

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值