人工智能之机器学习——模型评估与选择

机器学习方法在大型数据库中的应用称为数据挖掘(data mining)。在数据挖掘中,需要处理大量的数据以构建有使用价值的简单模型,例如具有高准确率的预测模型。数据挖掘的应用领域非常广泛:在金融业、银行分析历史数据,构建用于信用分析、诈骗检测、股票市场等方面的应用模型;在制造业,学习模型可以用于优化、控制以及故障检测等;在医学领域,学习程序可以用于医疗诊断等;在电信领域,通话模式的分析可用于网络优化和提高服务质量;在科学研究领域,比如物理学、天文学以及生物学的大量数据只有使用计算机才可能得到足够快的分析。万维网是巨大的,并且在不断增长,因此在万维网上检索相关信息不可能依靠人工完成。

机器学习还可以帮助我们解决视觉、语音识别以及机器人方面的许多问题。如人脸识别,通过分析一个人的脸部图像的多个样本,学习程序可以捕捉到那个人特有的模式,例如眼睛、鼻子和嘴巴的特定组合模式,然后再所给的图像中检测这种模式,从而进行辨认,这就是模式识别(pattern recognition)的一个例子。

一. 绪论

机器学习分为监督学习(supervised learning)、非监督学习(unsupervised learning)、强化学习(reinforcement learning)。监督学习问题分为两种:分类问题:预测离散值,如“好人”“坏人”和回归问题; 回归问题: 预测连续值,如癌症发病率0.22、0.34。

在监督学习中,我们的目标是学习从输入到输出的关系,其中输入的正确值是由历史数据提供的。但是,在非监督学习中没有这样的指导者,只有输入数据。我们的目标即发现输入数据中的规律:是否存在某种结构,使得额定的模式比其他模式更常出现,而我们希望哪些经常发生,哪些不经常发生。这被称为密度估计。聚类问题:目标是发现输入数据的簇或者分组。公司客户数据包括客户的个人统计信息以及以前与公司的交易,公司想知道客户的分布,搞清楚什么类型的客户会频繁出现。在这种情况下,聚类模型会将属性相似的客户分派到相同的分组。

需注意的是,机器学习的目标是使学得的模型能很好地适用于“新样本”,而不是仅仅在训练样本上工作得很好;即便对聚类这样的无监督学习任务,我们也希望学得的簇划分能适用于没在训练集中出现的样本。学得模型适用于新样本的能力,称为“泛化”(generalization)能力。具有强泛化能力的模型能很好地适用于整个样本空间。

归纳偏好

通过学习得到的模型对应了假设空间中的一个假设。现在有三个与训练集一致的假设,但与它们对应的模型在面临新样本时,却会产生不同的输出。这时,学习算法本身的“偏好”会起到关键作用。机器学习算法在学习过程中对某种类型假设的偏好,称为“归纳偏好”。

任何一个有效的机器学习算法必有其归纳偏好,否则它将被空间中看似在训练集上“等效”的假设所迷惑,而无法产生确定的学习结果。

二. 模型评估与选择

1. 经验误差与过拟合

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

精度:与错误率相对应,1-a/m称为“精度”;

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

我们实际希望的,是在新样本上能表现得很好的学习器。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致学习器本身的泛化性能下降。这种现象在机器学习中称为“过拟合”。与“过拟合”相对的是“欠拟合”,这是指对训练样本的一般性质尚未学好。

有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下造成的。欠拟合较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等。而过拟合则很麻烦,过拟合是机器学习面临的关键障碍,各类学习算法都必然带有些针对过拟合的措施;然而必须认识到,过拟合是无法彻底避免的,我们所能的只是“缓解”,或者说减小其风险。

2. 评估方法

通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需要使用一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

2.1 留出法

“留出法”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D=SUT,S∩T=Ø。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

缺点:留出法需划分训练集和测试集,若训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T较小,评估结果可能不够准确。常见做法是将2/3~4/5的样本用于训练,剩余样本用于测试。

2.2 交叉验证法

“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D1UD2U...UDk,Di∩Dj=Ø(i≠j)。每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”。k最常用的取值是10,此时称为10折交叉验证;其他常用的k值有5、20等。

交叉验证法的特例:数据集D中包含m个样本,若令k=m,则得到了交叉验证法的特例——留一法。显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分m个子集——每个子集只包含一个样本。缺点:在数据集比较大时,训练m个模型的计算开销可能是难以忍受的(例如数据集包含1百万个样本,则需训练1百万个模型),而这还是在未考虑算法调参的情况下。另外,留一法的估计结果也未必永远比其他评估方法准确。“没有免费的午餐”定理对实验评估方法同样适用。

2.3 自助法

在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这会引入一些因训练样本规模不同而导致的估计偏差。而“自助法”是以自助采样法为基础:给定包含m个样本的数据集D,对它进行采样产生数据集D':每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本下次采样时仍有可能被采到;这个过程重复执行m次后,就得到了包含m个样本的数据集D’,这就是自助采样的结果。显然,D中有一部分样本会在D'中多次出现,而另一部分样本不出现。通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D'中。于是可以将D'用作训练集,D\D'(“\”表示集合减法)用作测试集。这样实际评估的模型与期望评估的模型都使用m个训练样本,而仍有数据总量约1/3、没在训练集中出现的样本用于测试。

缺点:自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此自助法在数据集较小、难以有效划分训练/测试集时很有用,在初始数据量足够时,留出法和交叉验证法更常用。

2.4 调参与最终模型

因为参数配置不同,模型的性能往往有显著差别。因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需要对算法参数进行设定。这就是调参过程。

机器学习常涉及两类参数:
1. 算法的参数,亦称“超参数”,数目常在10以内;
2. 模型的参数,数目可能很多。

两者调参方式相似,均是产生多个模型之后基于某种评估方法来进行选择;不同之处在于前者通常是由人工设定多个参数候选值后产生模型,后者则是通过学习来产生多个候选模型(例如神经网络在不同轮数停止训练)

3. 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛华能力的评价标准,这就是性能度量。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评价结果:这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

回归任务最常用的性能度量是“均方误差”:
人工智能之机器学习——模型评估与选择
更一般的,对于数据分布D和概率密度函数,均方误差可描述为:
人工智能之机器学习——模型评估与选择

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

3.1 错误率与精度

错误率和精度是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。对样例集D,分类错误率定义为:
人工智能之机器学习——模型评估与选择
精度则定义为:
人工智能之机器学习——模型评估与选择
更一般的,对于数据分布D和概率密度函数,错误率和精度可分别描述为:
人工智能之机器学习——模型评估与选择
人工智能之机器学习——模型评估与选择

3.2 查准率、查全率与F1

在信息检索系统中,我们通常会关心“检索出的信息有多少比例是用户感兴趣的”“用户感兴趣的信息有多少被检索出来了”。“查准率”和“查全率”是更适用于此类需求的性能变量。

对二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)。令TP、FP、TN、FN分别表示其对应的样例数,则有

TP+FP+TN+FN=样例总数。分类结果的“混淆矩阵”如下表所示:
人工智能之机器学习——模型评估与选择
查准率P与查全率R分别定义为:
人工智能之机器学习——模型评估与选择人工智能之机器学习——模型评估与选择
查准率与查全率是一对矛盾的度量。以查准率为纵轴、查全率为横轴作图得到的查准率-查重率曲线,简称“P-R曲线”。若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可确定后者的性能优于前者;如果两个学习器的P-R曲线发生了交叉,则难以确定两者孰优孰劣。“平衡点”(Break-Even Point,BEP)是综合考虑查准率、查重率的性能度量,它是“查准率=查重率”时的值。更常用的是F1度量:
人工智能之机器学习——模型评估与选择
由于在一些情形中,对查准率和查全率的重视程度有所不同。例如商品推荐系统中,查准率更加重要;而在逃犯检索系统中,查全率更重要。F1度量的一般形式——FB,能表达出对查准率/查全率的不同偏好:
人工智能之机器学习——模型评估与选择,其中B>0度量了查全率对查准率的相对重要性。B=1时退化为标准的F1;B>1时查全率有更大影响;B<1; 时查准率有更大影响。

3.3 ROC与AUC

ROC(受试者工作特征)与P-R曲线相似,但是是以“真正例率(TPR)”为纵轴,以“假正例率(FPR)”为横轴:
人工智能之机器学习——模型评估与选择人工智能之机器学习——模型评估与选择

进行学习器的比较时,与P-R图类似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可确定后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则一般比较ROC曲线下的面积,即AUC

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

不同类型的错误所造成的后果有时候是不同的,为权衡不同类型错误所造成的不同损失,可以为错误赋予“非均等代价”。以二分类任务为例,可以根据任务的领域知识设定一个“代价矩阵”,如下表所示,其中costi,j表示将第i类样本预测为第j类样本的代价。一般来说,costii=0;若将第0类预测为第1类所造成的损失更大,则cost01>cost10,反之亦然。
人工智能之机器学习——模型评估与选择

之前的一些性能度量可看出,它们大都隐式地假设了均等代价,并没有考虑不同错误会造成不同的后果。在非均等代价下,我们所希望的不再是简单的最小化错误次数,而是希望最小化“总体代价”。若将上表中的第0类作为正类、第1类作为反例,令D+与D-分别代表样例集D的正例子集和反例子集,则“代价敏感”错误率为:
人工智能之机器学习——模型评估与选择
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。代价曲线图的横轴是取值为[0,1] 的正例概率代价
人工智能之机器学习——模型评估与选择
其中p是样例为正例的概率;纵轴是取值为[0,1] 的归一化代价
人工智能之机器学习——模型评估与选择
其中FPR是假正例率,FNR=1-TPR是假反例率。代价曲线的绘制:ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(FPR,TPR),则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。

4. 比较检验

有了实验评估方法和性能度量,似乎就能对学习器的性能进行评估比较了:先使用某种实验评估方法测得学习器的某个性能度量结果,然后对这些性果进行比较。但怎么来做这个“比较”呢?是直接取得性能度量的值然后“比大小”吗?实际上,机器学习中性能比较这件事要比大家想象的复杂得多。这里面涉及几个重要因素:首先,我们希望比较的是泛化性能,然而通过实验评告方法我们获得的是测试集上的性能,两者的对比结果可能未必相同:第二,测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即便用相同大小的测试集,若包含的测试样例不同,测试结果也会有不同;第三,很多机器学习算法本身有一定的随机性,即便用相同的参要设置在同一个测试集上多次运行,其结果也会有不同。那么,有没有适当的方法对学习器的性能进行比较呢?

统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要据。基于假设检验结果我们可推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。下面我们先介绍两种最基本的假设检验,然后介绍几种常用的机器学习性能比较法。为便于讨论,本节默认以错误率为性能度量,用ε表示。

4.1 假设检验

假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,如“ε=ε0”。现实任务中我们并不知道学习器的泛化错误率,只能获知其测试误率€。泛化错误率与测试错误率未必相同,但直观上,二者接近的可能性应比较大,相差很远的可能性比较小。因此,可根据测试错误率估推出泛化错误率的分布。

泛化错误率为ε的学习器在一个样本上犯错的概率是ε;测试错误率€意味着在m个测试样本中恰有€*m个被误分类。假定测试样本是从样本总体分布中独立采样而得,那么泛化错误率为ε的学习器将其中m’个样本误分类、其余样本全都分类正确的概率是
人工智能之机器学习——模型评估与选择
由此可估算出其恰将€*m个样本误分类的概率如下式所示,这也表达了在包含m个样本的测试集上,泛化错误率为ε的学习器被测得测试错误率为€的概率:
人工智能之机器学习——模型评估与选择
给定测试错误率,则解∂P(€;ε)/∂ε=0可知,P(€;ε)在ε=€时最大,|ε-€|增大时P(€;ε)减小。这符合二项(binomial)分布。假设ε=0.3,则10个样本中测得3个被误分类的概率最大。

我们可使用“二项检验”(binomial test)来对“ε≤0.3”(即“泛化错误率是否不大于0.3”)这样的假设进行检验。更一般的,考虑假设“ε≤εo”,则在1-α的概率内所能观测到的最大错误率如下式计算。这里1-α反映了结论的“置信度”(confidence)。
εm=max ε     人工智能之机器学习——模型评估与选择
此时若测试错误率€小于临界值εm,则根据二项检验可得出结论:在α的显著度下,假设“ε≤εo”不能被拒绝,即能以1-α的置信度认为,学习器的泛化错误来不大于εo;否则该假设可被拒他,即在α的显著度下可认为学习器的泛化错误率大于εo

在很多时候我们并非仅做一次留出法估计,而是通过多次重复留出法或是交叉验证法等进行多次训练/测试,这样会得到多个测试错误率,此时可使用“t检验”(t-test)。假定我们得到了k个测试错误率,€1,€2,...,€k,则平均测错误率µ和方差σ2
人工智能之机器学习——模型评估与选择   人工智能之机器学习——模型评估与选择
考虑到这k个测试错误率可看作泛化错误率εo的独立采样,则变量人工智能之机器学习——模型评估与选择服从自由度为k-1的t分布。

对假设“µ=εo”和显著度α,我们可计算出当测试错误率均值为εo时,在1-α概率内能观测到的最大错误率,即临界值。这里考虑双边(two-tailed)假设,如t分布示意图所示,两边阴影部分各有α/2的面积;假定阴影部分范围分别为[-∞,t-α/2]和[tα/2,+∞]。若平均错误率µ与εo之差|µ-εo|位于临界值范围[t-α/2,tα/2],则不能拒绝假设“µ=εo”,即可认为泛化错误率为εo,置信度为1-α;否则可拒绝该假设,即在该显著度下可认为泛化错误率与εo有显著不同。α常用取值有0.05和0.1。

上面介绍的两种方法都是对关于单个学习器泛化性能的假设进行检验,而在现实任务中,更多时候我们需要对不同学习器的性能进行比较,下面将介绍适用于此类情况的假设检验方法。

4.2 交叉验证t检验

4.3 McNemar检验

4.4 Friedman检验与Nemenyi后续检验

5. 偏差与方差

对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它“为什么”具有这样的性能。“偏差-方差分解”(bias- variance decomposition)是解释学习算法泛化性能的一种重要工具。偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。由于算法在不同调练集上学得的结果很可能不同,即便这些训练集是来自同一个分布。对测试样本x,令yD为x在数据集中的标记,y为x的真实标记,f(x;D)为训练集D上学得模型f在x上的预测输出。以回归任务为例,学习算法的期望预测为:f'(x)=ED[f(x;D)],使用样本数相同的不同训练集产生的方差为:var(x)=ED[(f(x;D)-f'(x))2],噪声为ε2=ED[(yD-y)2],期望输出与真实标记的差别称为偏差:bias2(x)=(f'(x)-y)2

为便于讨论,假定噪声期望为0,即ED(yD-y)=0,通过简单多项式展开合并,可对算法的期望泛化误差进行分解,可得:泛化误差可分解为偏差、方差与噪声之和。

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻面了学习问题本身的难度。偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variancedilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。

本文转自:博客园 - 蒸煮瓜子,转载此文目的在于传递更多信息,版权归原作者所有。

--电子创新网--
粤ICP备12070055号