2.1 经验误差与过拟合

先介绍几个专业名词:
错误率(error rate): 通常我们把分类错误的样本数占样本总数的比例称为错误率;即如果在 m m m个样本中有 a a a个样本分类错误,则错误率 E = a / m E=a/m E=a/m;相应的, 1 − a / m 1-a/m 1−a/m称为 “精度”;即“精度=1-错误率”。
误差(error): 我们把学习器的实际预测输出与样本的真实输出之间的差异称为"误差"。学习器在训练集上的误差称为“训练误差(training error)”或“经验误差(empirical error)”,在新样本上的误差称为“泛化误差(generalization error)”。
注意: 博主在学习的时候,这里一度很疑问,这个误差和错误率究竟有什么区别呢?感觉从定义来看一样啊。之后我查了一些资料,又自己想了想,觉得这里的错误率是针对的分类问题来说的,而误差则是根据回归问题来说的。

从上面的定义中,我们可以知道,我们在建立机器学习模型的时候,目的,是为了要得到泛化误差小的学习器,即学习器在新样本上的精度要尽可能的高。但是我们并不知道我们要测试的新样本是什么样的,所以一般我们用来衡量学习器精度的就是经验误差,即使得学习器的经验误差最小化。

过拟合(overfitting):当学习器把训练样本学得“太好了”的时候,很可能已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,这样就会使得泛化性能下降。这种现象就被称为“过拟合”。
欠拟合(underfitting):与“过拟合”相对,这是指对训练样本的一般性质尚未学好。
相信欠拟合大家都能理解,但是过拟合可能不太容易理解,这里我给出一张图来说明一下什么叫过拟合(该图取自吴恩达的机器学习课程):

从上图可以看到,我们是为了拟合price关于size的曲线,以便对新的size来进行预测。我们可以看到,中间一幅图是正确的拟合,经验误差比较小,而第一幅图就是欠拟合的过程,没有完全学习样本的普遍规律,而第三幅图,乍一看,拟合得很好,经验误差可能会很低,但是却发生了过拟合,因为这个模型对数据太过敏感了,只要数据一丁点的变化,模型的输出就会有所变化,这肯定带来的后果就是泛化能力很差,在训练集上表现良好的模型,在测试集上表现却会变差。针对这个问题,我们一般用正则化的方法来解决,这里就先不提了。

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

在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。那么,我们该选用哪一个学习算法、使用哪一种参数配置呢?这就是机器学习中的“模型选择(model selection)”问题。理想的解决方案当然是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。然而如上面的讨论,我们无法直接获得泛化误差,而训练误差有由于过拟合现象的存在而不合适作为标准,那么,在现实中如何进行模型的评估与选择呢?

2.2 评估方法

虽然我们在评估模型的时候,不能得到学习器的泛化误差,但是我们一般会将数据集分为训练集和测试集,用训练集训练模型,而后将学习器运用在测试集上,用测试集的误差来作为泛化误差的近似。

通常我们假设测试样本也是从样本真实分布中独立同分布采样而得,但需注意的是,测试集应该尽可能与训练集互斥,即测试集样本尽量不在训练集中出现、未在训练集中使用过。

这里有个问题,为什么说测试集样本尽量“不在”训练集中出现呢?我们可以假想这样一种情况:老师出了10道题供同学们练习,考试的时候,老师如果又出了这是道题来作为考题,那么,这份试卷是否能反应同学们的真实实力呢?显然是不能的,可能有的学生只会做这四道题而得到高分。

接下来,我们来看几种常见的从训练集样本中分离训练集和测试集的方法:
假设我们有一个包含 m m m个样例的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} D={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}。

2.2.1 留出法

“留出法(hold-out)”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集 S S S,另一个作为测试集 T T T,即 D = S ∪ T , S ∪ T = ∅ D=S\cup T, S\cup T=\varnothing D=S∪T,S∪T=∅.在 S S S上训练出模型后,用 T T T来评估其测试误差,作为对泛化误差的估计。

以二分类问题为例,假定 D D D包含1000个样本,将其划分为 S S S包含700个样本, T T T包含300个样本,用 S S S进行训练后,如果模型在 T T T上有90个样本分类错误,那么该学习器的错误率为 ( 90 / 300 ) × 100 % = 30 % (90/300)\times 100\%=30\% (90/300)×100%=30%,相应的,精度为 1 − 30 % = 70 % 1-30\%=70\% 1−30%=70%。

但是这里需要注意的是,在划分训练集和测试集的时候,要保证数据分布的一致性,避免因数据划分过程中引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保证样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方法叫做“分层采样(stratified sampling)”。例如通过对 D D D进行分层采样而获得含 70 % 70\% 70%样本的训练集 S S S和含 30 % 30\% 30%的样本的测试集 T T T,若 D D D包含500个正例,500个反例,则分层采样得到的 S S S应包含350个正例,350个反例,而 T T T则包含150个正例,150个反例;若 S , T S,T S,T这个样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

如果我们在训练集和测试集中,正反例样本的分布不同,会得出下述分类结果:

另一个须注意的问题是,即便在给定训练/测试集的样本比例以后,仍存在多种划分方式对数据集 D D D进行分割。例如在上面的例子中,可以把 D D D中的样本排序,然后把前350个正例放到训练集中,也可以把最后350正例放到训练集中,。。。这些不同的划分方法将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。

此外,我们希望评估的是用 D D D训练出的模型,如果在划分训练集和测试集的时候,如果训练集包含的样本数过多,测试集包含的样本数多少,这样得到的模型更接近于用数据集 D D D训练出的模型,但是测试集样本数较少,导致得到的结构不够稳定可靠;若训练集包含的样本数较少,则训练集与数据集的差别变大,被评估的模型与用数据集训练出的模型相比有较大的差别,从而降低了评估结果的保真性。因此在划分训练集与测试集的样本数的时候,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

总结:1.直接划分训练集与测试集、2.训练集和测试集均分层采样、3.随机划分若干次,重复试验取均值

2.2.2 交叉验证法

“交叉验证法”(cross validation)先将数据集 D D D划分为 k k k个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D=D_1\cup D_2\cup ... \cup D_k, D_i \cap D_j = \emptyset(i \ne j) D=D1​∪D2​∪...∪Dk​,Di​∩Dj​=∅(i​=j).每个子集 D i D_i Di​都尽可能保持数据分布的一致性,即从 D D D中通过分层采样得到。然后,每次用 k − 1 k-1 k−1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得 k k k组训练/测试集,从而可进行 k k k次训练和测试,最终返回的是这 k k k个测试结果的均值。显然,该方法的评估结果的稳定性和保真性很大程度上取决于 k k k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证法”。

与留出法相似,将数据集 D D D划分为 k k k个子集同样存在着多种划分方式。为减少因样本划分不同而引入的差别, k k k折交叉验证法通常需要随机使用不同的划分重复 p p p次,最终的评估结果是这 p p p次 k k k折交叉验证结果的均值。例如常用的有“1次10折交叉验证法”。

特例:留一法(leave one out),即 k = m k=m k=m,结果较为准确,但是训练模型的开销很大。
优点:准确;缺点:开销大

2.2.3 自助法

我们希望评估的是用 D D D训练出的模型,但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D D D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但是计算复杂度又太高。

自助法(bootstrapping)是一个比较好的解决方法,他直接以自助采样法(bootstrap sampling)为基础。给定一个包含 m m m个样本的数据集 D D D,我们对它进行采样产生数据集 D ′ D' D′:每次随机从 D D D中挑选一个样本,将其拷贝放入 D ′ D' D′中,然后再将该样本放回初始数据集 D D D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m m m次之后,我们就得到了包含 m m m个样本的数据集 D ′ D' D′,这就是自主采样的结果。

显然,在上述采样过程中, D D D中有一部分样本会在 D ′ D' D′中出现多次,而另一部分样本不出现。可以做一个简单的估计,样本在 m m m次采样中始终不被采到的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1​)m,取极限得到:
( 1 − 1 m ) m = 1 e ≈ 0.368 (1-\frac{1}{m})^m=\frac{1}{e}\approx 0.368 (1−m1​)m=e1​≈0.368
即通过自助法采样,初始数据集 D D D中约有 36.8 % 36.8\% 36.8%的样本未出现在采样数据集 D ′ D' D′中。于是我们可以将 D ′ D' D′用作训练集, D / D ′ D/D' D/D′用作测试集;这样,实际评估的模型与期望评估的模型都用 m m m个训练样本,而我们仍有数据总量的 1 / 3 1/3 1/3、没在训练集中出现的样本用于测试。这样的测试结果,我们称之为“包外估计”。

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

优点:训练集与数据集规模一致;数据集小、难以有效划分训练集和测试集时效果显著;能产生多个不同的训练集;
缺点:改变了训练集的样本分布,引入估计偏差。

调参与最终模型

大多数学习算法都有些参数需要设定,参数配置不同,学得的模型的性能往往有显著差别。因此,在进行模型评估与选择的时候,除了要对使用学习的算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning).

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是“性能度量”(performance measure).

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

在预测任务中,给定样例集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} D=(x1​,y1​),(x2​,y2​),...,(xm​,ym​),其中 y i y_i yi​是示例 x i x_i xi​的真实标记。要评估学习器 f f f的性能,就要把学习器预测结果 f ( x ) f(x) f(x)与真实标记 y y y进行比较。

回归任务中最常用的性能度量是“均方误差”(mean squared error):
E ( f : D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 . E(f:D)=\frac{1}{m}\sum^m_{i=1}(f(x_i)-y_i)^2. E(f:D)=m1​i=1∑m​(f(xi​)−yi​)2.
更一般的,对于数据分布 D \mathcal{D} D和概率密度函数 p ( ⋅ ) p(\cdot) p(⋅),均方误差可以描述为:
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x . E(f;\mathcal{D})=\int_{x\sim \mathcal{D}}(f(x)-y)^2p(x)dx. E(f;D)=∫x∼D​(f(x)−y)2p(x)dx.

2.3.1 错误率与精度

错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样例集 D D D,分类错误率为
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) . E(f;D)=\frac{1}{m}\sum^m_{i=1}\mathbb{I}(f(x_i)\ne y_i). E(f;D)=m1​i=1∑m​I(f(xi​)​=yi​).
其中, I \mathbb{I} I为示性函数,对于任意的 i i i,若 f ( x i ) ≠ y i f(x_i)\ne y_i f(xi​)​=yi​,对应的示性函数加一,上述式子中的示性函数的作用是用来计算分类错误的样例的个数。

精度则定义为:
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( x ; D ) . acc(f;D)=\frac{1}{m}\sum^m_{i=1}\mathbb{I}(f(x_i)=y_i)=1-E(x;D). acc(f;D)=m1​i=1∑m​I(f(xi​)=yi​)=1−E(x;D).
更一般地,对于数据分布 D \mathcal{D} D和概率密度函数 p ( ⋅ ) p(\cdot) p(⋅),错误率与精度可分别描述为:
E ( x ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x , E(x;D)=\int_{x\sim \mathcal{D}}\mathbb{I}(f(x)\ne y)p(x)dx, E(x;D)=∫x∼D​I(f(x)​=y)p(x)dx,
a c c ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( x ; D ) . acc(f;D)=\int_{x\sim \mathcal{D}}\mathbb{I}(f(x)= y)p(x)dx=1-E(x;D). acc(f;D)=∫x∼D​I(f(x)=y)p(x)dx=1−E(x;D).

2.3.2 查准率、查全率与F1

错误率与精度是用来衡量有多少比例的样本被错判,但如果我们需要知道的是在正例中,有多少样例是被挑出来的,或者挑出的西瓜中有多少样例是正例,那么我们就不能再使用错误率与精度了,就该使用查准率与查全率了。

对于二分类问题,可将样例根据真实类别与学习器的预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)以及假反例(false negative)四种情形,令 T P TP TP、 F P FP FP、 T N TN TN、 F N FN FN分别表示其对应的样例数,则显然有 T P + F P + T N + F N = 样例总数 TP+FP+TN+FN=\text{样例总数} TP+FP+TN+FN=样例总数。分类结果的“混淆矩阵”(confusion matrix)如下表所示:

真实情况 预测结果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)

查准率 P P P与查全率 R R R分别定义为:
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP​
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP​

查准率P 考量对于学习器的辨别真实能力,即剔除披着真实外衣的假向量的能力
查全率R 考量对于学习器的包容真实能力,即能容忍与假向量多少相似度的真向量的能力

这里举个例子,比如医院在诊断病人是否得了癌症,则:
查准率表示在所有被医院诊断有癌症的病人中,真的患癌症的病人的比例;
查全率表示在所有有癌症的病人中,被医院诊断出患有癌症的的比例。

在另一篇博客中,还看到了这样的应用:
查准率和查全率应用的场合各不相同,比如查准率会用在网站向用户推送广告,推送的广告中用户感兴趣的广告所占比例越大(即查准率大),系统就越好,而查全率会用在犯罪系统的评估上,即预测出来的罪犯的数量越接近真实的罪犯数量(即查全率大),犯罪评估系统就越好。

查准率与查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。(关于两者之间的大小关系,暂时还没有找到通俗易懂的方式来解释,暂时挖坑)

在很多情况下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后面的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”,示意图如下:
关于该图的画法,可参考:https://blog.csdn.net/teminusign/article/details/51982877
P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如上图中学习器A的性能优于学习器C;如果有两个学习器的P-R曲线发生了交叉,如图中的A与B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率和查全率条件下进行比较。然而,在很多情况下,我们不得不作出比较,这时,一个比较合理的判据是比较P-R曲线下面积的大小,他在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。但这个值不太容易估算,因此,人们设计了一些综合考虑查准率和查全率的性能度量。

“平衡点”(Break-Even Point, 简称BEP)就是这样一个度量,它是“查准率=查全率”时的取值,例如上图中学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于学习器B。

但是BEP还是过于简化了一点,更常用的是 F 1 F1 F1度量:
F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N . F1=\frac{2\times P \times R}{P + R}=\frac{2\times TP}{\text{样例总数}+ TP - TN}. F1=P+R2×P×R​=样例总数+TP−TN2×TP​.

在一些应用中,对查准率与查全率的重视程度不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。 F 1 F1 F1度量的一般形式—— F β F_\beta Fβ​,能让我们表达出对查准率/查全率的不同偏好,他定义为:
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R , F_\beta=\frac{(1+\beta^2)\times P \times R}{(\beta^2 \times P)+R}, Fβ​=(β2×P)+R(1+β2)×P×R​,
其中, β > 0 \beta>0 β>0度量了查全率对查准率的相对重要性。 β = 1 \beta=1 β=1时退化为标准的 F 1 F_1 F1​; β > 1 \beta>1 β>1时查全率有重大影响; β < 1 \beta<1 β<1时查准率有更大影响。

在一些时候,我们会得到很多个二分类混淆矩阵,这种情况的出现可能是因为进行了多次训练,每次得到一个混淆矩阵;或者在多个数据集上进行训练,希望估计算法的“全局”性能;甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵。。。总之我们希望在 n n n个二分类混淆矩阵上综合考察查准率和查全率。

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

m a c r o - P = 1 n ∑ i = 1 n P i m a c r o - R = 1 n ∑ i = 1 n R i m a c r o - F 1 = 2 × m a c r o - P × m a c r o - R m a c r o - P + m a c r o - R . \begin{aligned} macro\text{-}P&=\frac{1}{n}\sum^n_{i=1}P_i \\ macro\text{-}R&=\frac{1}{n}\sum^n_{i=1}R_i \\ macro\text{-}F1&=\frac{2\times macro\text{-}P \times macro\text{-}R}{macro\text{-}P+macro\text{-}R}. \end{aligned} macro-Pmacro-Rmacro-F1​=n1​i=1∑n​Pi​=n1​i=1∑n​Ri​=macro-P+macro-R2×macro-P×macro-R​.​

还可先将各混淆矩阵的对应元素进行平均,得到 T P TP TP、 F P FP FP、 T N TN TN、 F N FN FN的平均值,分别记为 T P ‾ \overline{TP} TP、 F P ‾ \overline{FP} FP、 T N ‾ \overline{TN} TN、 F N ‾ \overline{FN} FN,再基于这些平均值计算出“微查准率(micro-P)”、“微查全率(micro-R)”和“微F1(micro-F1)”:
m i c r o - P = T P ‾ T P ‾ + F P ‾ m i c r o - R = T P ‾ T P ‾ + F N ‾ m i c r o - F 1 = 2 × m i c r o - P × m i c r o - R m i c r o - P + m i c r o - R \begin{aligned} micro\text{-}P&=\frac{\overline{TP}}{\overline{TP}+\overline{FP}} \\ micro\text{-}R&=\frac{\overline{TP}}{\overline{TP}+\overline{FN}} \\ micro\text{-}F1&=\frac{2\times micro\text{-}P\times micro\text{-}R}{micro\text{-}P+micro\text{-}R} \end{aligned} micro-Pmicro-Rmicro-F1​=TP+FPTP​=TP+FNTP​=micro-P+micro-R2×micro-P×micro-R​​

2.3.3 ROC与AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。
在不同的应用任务中,我们可根据任务需求来采用不同的截断点,例如若我们更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视查全率,则可选择靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏。 R O C ROC ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。
R O C ROC ROC全称是“受试者工作特征(Receiver Operating Characteristic)”曲线,它源自于二战中用于敌机检测的雷达信号分析技术。与 P − R P-R P−R曲线类似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以他们的值为横、纵坐标作图,就得到了“ R O C ROC ROC曲线”。与 P − R P-R P−R曲线以查准率与查全率为纵横坐标不同, R O C ROC ROC曲线的纵横坐标是“真正例率(True Positive Rate,简称TPR)”,横轴是“假正例率(False Positive Rate,简称FPR)”,两者分别定义为:
T P R = T P T P + F N F P R = F P T N + F P \begin{aligned} TPR=\frac{TP}{TP+FN} \\ FPR=\frac{FP}{TN+FP} \end{aligned} TPR=TP+FNTP​FPR=TN+FPFP​​
放在具体领域来理解上述两个指标。
如在医学诊断中,判断有病的样本。
那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。
而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。
不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

显示 R O C ROC ROC曲线的图称为“ R O C ROC ROC图”。

现实任务中,通常是用有限个测试样例来绘制 R O C ROC ROC图,此时仅能获得有限个(真正利率,假正例率)坐标对,无法产生上图a中的光滑 R O C ROC ROC曲线,只能绘制出b中的近似 R O C ROC ROC曲线。绘图很简单:给定 m + m^+ m+个正例和 m − m^- m−个反例,根据学习器的预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标 ( 0 , 0 ) (0,0) (0,0)处标记一个点。然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为 ( x , y + 1 m ) (x,y+\frac{1}{m}) (x,y+m1​),当前若为真正例,则对应标记点的坐标为 ( x , y + 1 m + ) (x,y+\frac{1}{m^+}) (x,y+m+1​);当前若为假正例,则对应标记点的坐标为 ( x + 1 m − , y ) (x+\frac{1}{m^-},y) (x+m−1​,y),然后用线段连接相邻点即得。
ROC曲线上有几个值得关注的点:

  • (0,1):此时FPR=0FPR=0,TPR=1TPR=1模型最好,混淆矩阵是对角矩阵
  • (0,0):FPR=0FPR=0,TPR=0TPR=0,此时当t≥1t≥1时取到,即样本预测全部为负样本,混淆矩阵第一行全为0
  • (1,1):FPR=1FPR=1,TPR=1TPR=1,此时当t≤0t≤0时取到,即样本预测全部为正样本,混淆矩阵第二行全为0

这几个点的解释如下:

我们可以看出,左上角的点 ( T P R = 1 , F P R = 0 ) (TPR=1,FPR=0) (TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点 A ( T P R > F P R ) A(TPR>FPR) A(TPR>FPR),医生A的判断大体是正确的。中线上的点 B ( T P R = F P R ) B(TPR=FPR) B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点 C ( T P R < F P R ) C(TPR<FPR) C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。

ROC曲线的一个优点就是,它和测试样本的类别分布于与误分类代价无关,即无论测试样本的正反例比例如何变化、无论误分类代价如何变化,分类器的ROC曲线都是不变的。

多个实例概率/得分相同

还需要考虑特殊情况:如果一个分类器打分结果中,有多个实例得分是一样的情况下,ROCROC曲线要怎么画?比如现在有10个实例得分相同,其中6个是正例,4个是反例。

对这10个实例采用不同的具体排序方式,ROC路线是不一样的(红色点代表排在这10个实例之前的那个实例):

上图中对应两种排序方式:把所有正例排在前面;把所有反例排在前面。对于其他混合排序的情况,其路线都落在这个矩形内部。ROC曲线应该表示分类器的期望性能,也就是对角线。

在进行学习器的比较时,与 P - R P\text{-}R P-R图类似,若一个学习器的 R O C ROC ROC曲线能被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的 R O C ROC ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判据是比较 R O C ROC ROC曲线下的面积,即 A U C AUC AUC(Area Under ROC Curve),如上图所示。

从定义可知, A U C AUC AUC可通过对 R O C ROC ROC曲线下各部分的面积求和而得。假定 R O C ROC ROC曲线是由坐标为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) {(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} (x1​,y1​),(x2​,y2​),...,(xm​,ym​)的点按序连接而形成 ( x 1 = 0 , x m = 1 ) (x_1=0,x_m=1) (x1​=0,xm​=1),参见上图b,则 A U C AUC AUC可估算为:
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) . AUC=\frac{1}{2}\sum^{m-1}_{i=1}(x_{i+1}-x_i)\cdot(y_i+y_{i+1}). AUC=21​i=1∑m−1​(xi+1​−xi​)⋅(yi​+yi+1​).
形式化的看, A U C AUC AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定 m + m^+ m+个正例和 m − m_- m−​个反例,令 D + D^+ D+和 D − D^- D−分别表示正、反例集合,则排序“损失”(lose)定义为:
l r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( I ( f ( x + ) < f ( x − ) ) + 1 2 I ( f ( x + ) = f ( x − ) ) ) l_{rank}=\frac{1}{m^+m^-}\sum_{x^+\in D^+}\sum_{x^-\in D^-}(\mathbb{I}(f(x^+)<f(x^-))+\frac{1}{2}\mathbb{I}(f(x^+)=f(x^-))) lrank​=m+m−1​x+∈D+∑​x−∈D−∑​(I(f(x+)<f(x−))+21​I(f(x+)=f(x−)))
排序损失的计算公式(2.21)计算的是:对所有正例,得分比其高的反例数之和,并用 m + m − m^+m^− m+m−进行归一化。
对于得分和该正例相同的反例,数量需要除以2。
即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。容易看出, l r a n k l_{rank} lrank​对应的是 R O C ROC ROC曲线之上的面积:若一个正例在 R O C ROC ROC曲线对应标记点的坐标为 ( x , y ) (x,y) (x,y),则 x x x恰是排序在其之前的反例所占的比例,即假正例率。因此有
A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1−lrank​
从AUC判断分类器(预测模型)优劣的标准:

  • AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
AUC的概率解释

AUC常常被用来作为模型排序好坏的指标,原因在于AUC可以看做随机从正负样本中选取一对正负样本,其中正样本的得分大于负样本的概率!考虑随机取得这对正负样本中,负样本得分在 [ t , t + Δ t ] [t,t+Δt] [t,t+Δt]之间的概率为:
P ( t ≤ s − < t + Δ t ) = P ( s − > t ) − P ( s − > t + Δ t ) = N − ( t ) − N − ( t + Δ t ) N − = x ( t ) − x ( t + Δ t ) = − Δ x ( t ) P(t\leq s_- \lt t+\Delta t)=P(s_-\gt t)-P(s_-\gt t+\Delta t) \\ =\frac{N_-(t)-N_-(t+\Delta t)}{N_-}=x(t)-x(t+\Delta t)=-\Delta x(t) P(t≤s−​<t+Δt)=P(s−​>t)−P(s−​>t+Δt)=N−​N−​(t)−N−​(t+Δt)​=x(t)−x(t+Δt)=−Δx(t)
如果 Δ t \Delta t Δt很小,那么该正样本得分大于该负样本的概率为:
P ( s + > s − ∣ t ≤ s − < t + Δ t ) ≈ P ( s + > t ) = N + ( t ) N + = y ( t ) P(s_+\gt s_- |t\leq s_-\lt t+\Delta t)\approx P(s_+\gt t)=\frac{N_+(t)}{N_+}=y(t) P(s+​>s−​∣t≤s−​<t+Δt)≈P(s+​>t)=N+​N+​(t)​=y(t)
所以, P ( s + > s − ) = ∑ P ( t ≤ s − < t + Δ t ) P ( s + > s − ∣ t ≤ s − < t + Δ t ) = − ∫ t = ∞ − ∞ y ( t ) d x ( t ) = A U C P(s_+\gt s_-)=\sum P(t\leq s_-\lt t+\Delta t)P(s_+ \gt s_-|t\leq s_-\lt t+\Delta t)= -\int^{-\infty}_{t=\infty}y(t)dx(t)=AUC P(s+​>s−​)=∑P(t≤s−​<t+Δt)P(s+​>s−​∣t≤s−​<t+Δt)=−∫t=∞−∞​y(t)dx(t)=AUC
这个积分表示为随机在样本里面取一对正负样本,正样本得分得分大于负样本的概率。

为什么使用Roc和Auc评价分类器

既然已经这么多标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。
下图是ROC曲线和Presision-Recall曲线的对比:

在上图中,(a)和©为Roc曲线,(b)和(d)为Precision-Recall曲线。

(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,©(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果,可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。

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

在现实任务中,常会遇到这样的情况:不同类型的错误所造成的的后果不同。例如,在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次”错误,但后者的影响增加了进一步检查的麻烦,前者的后果可能是丧失了拯救生命的最佳时机。为权衡不同类型错误所造成的的不同损失,可为错误赋予“非均等代价”(unequal cost)。
以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”,如下表所示,其中, cos ⁡ t i j \cos t_{ij} costij​表示将第 i i i类样本预测为第 j j j类样本的代价。一般来说, cos ⁡ t i j = 0 \cos t_{ij}=0 costij​=0;若将第0类判别为第1类错误所造成的损失更大,则 cos ⁡ t 01 > cos ⁡ t 10 \cos t_{01}\gt \cos t_{10} cost01​>cost10​;损失程度相差越大, cos ⁡ t 01 \cos t_{01} cost01​与 cos ⁡ t 10 \cos t_{10} cost10​值的差别越大。

真实类别 预测类别
第0类 第1类
第0类 0 cos t_{01}
第1类 cos t_{10} 0

回顾前面介绍的一些性能度量可看出,他们大都隐式的假设了均等代价例如前面的错误率是直接计算“错误次数”,并没有考虑不同错误的后果。在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”。若将上表中的第0类作为正类,第1类作为反类,令 D + D^+ D+与 D − D^- D−分别代表样例集 D D D的正例子集和反例子集,则“代价敏感”错误率为:
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × cos ⁡ t 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × cos ⁡ t 10 ) . E(f;D;cost)=\frac{1}{m}(\sum_{x_i\in D^+}\mathbb{I}(f(x_i)\neq y_i)\times \cos t_{01}+\sum_{x_i\in D^-}\mathbb{I}(f(x_i)\neq y_i)\times \cos t_{10}). E(f;D;cost)=m1​(xi​∈D+∑​I(f(xi​)​=yi​)×cost01​+xi​∈D−∑​I(f(xi​)​=yi​)×cost10​).
类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量,如精度的代价敏感版本。若令 cos ⁡ t i j \cos t_{ij} costij​中的 i i i、 j j j取值不限于0、1,则可定义出多分类任务的代价敏感性能度量。
在非均等代价下, R O C ROC ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”则可达到该目的。代价曲线图的横轴是取值为 [ 0 , 1 ] [0,1] [0,1]的正例概率代价
P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 , P(+)cost=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}}, P(+)cost=p×cost01​+(1−p)×cost10​p×cost01​​,
其中 p p p是样例为正例的概率;纵轴是取值为 [ 0 , 1 ] [0,1] [0,1]的归一化代价
c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 , cost_{norm}=\frac{FNR\times p\times cost_{01}+FPR\times (1-p) \times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}}, costnorm​=p×cost01​+(1−p)×cost10​FNR×p×cost01​+FPR×(1−p)×cost10​​,
其中, F P R FPR FPR是前面定义的假正例率, F N R = 1 − T P R FNR=1-TPR FNR=1−TPR是假反例率。代价曲线的绘制很简单: R O C ROC ROC曲线上每一点对应了代价平面上的一条线段,设 R O C ROC ROC曲线上点的坐标为 ( F P R , T P R ) (FPR,TPR) (FPR,TPR),则可相应计算出 F N R FNR FNR,然后在代价平面上绘制一条从 ( 0 , F P R ) (0,FPR) (0,FPR)到 ( 1 , F N R ) (1,FNR) (1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将 R O C ROC ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总代价,如下图所示。

假设样本集 D D D的样本数目为 N N N,将正例概率代价上下同时乘以 N N N,则得到:
P ( + ) c o s t = N × p × c o s t 01 N × p × c o s t 01 + N × ( 1 − p ) × c o s t 10 , P(+)cost=\frac{N\times p\times cost_{01}}{N\times p\times cost_{01}+N\times (1-p)\times cost_{10}}, P(+)cost=N×p×cost01​+N×(1−p)×cost10​N×p×cost01​​,
其中,分母 N × p × c o s t 01 + N × ( 1 − p ) × c o s t 10 N\times p\times cost_{01}+N\times (1-p)\times cost_{10} N×p×cost01​+N×(1−p)×cost10​表示样本集中所有正例都被认为是反例的代价与所有反例被认为是正例的代价之和,也就是样本划分的最大代价。分子表示所有正例都被认为是反例的代价。这个比率,就是正例划分错误的代价在最大总体代价下的比例。当 P ( + ) cos ⁡ t = 0 P(+)\cos t=0 P(+)cost=0时,即 p = 0 p=0 p=0,说明样本中没有正例。当 P ( + ) cos ⁡ t = 1 P(+)\cos t=1 P(+)cost=1时,即 p = 1 p=1 p=1,说明样本中有反例。
将归一化代价上下同乘以样本数量 N N N,则 N × F N R × p × cos ⁡ t 01 = N × p × F N R × cos ⁡ t 01 N\times FNR \times p\times \cos t_{01} = N\times p \times FNR\times \cos t_{01} N×FNR×p×cost01​=N×p×FNR×cost01​, N × p N\times p N×p是正样例的数目, F N R FNR FNR是正样例中被误判为反例的数目。所以分子的第一部分是在某一阈值 p p p下,将正例判别为反例的代价。同理第二部分可以看成是在阈值 p p p下,将反例判为正例的代价。因此,分子部分的和表示算法 f f f在某一阈值 p p p下的总代价。
当 p = 0 p=0 p=0时, P ( + ) c o s t = 0 , c o s t n o r m = F P R P(+)cost=0,cost_{norm}=FPR P(+)cost=0,costnorm​=FPR;同理,当 p = 1 p=1 p=1时, P ( + ) c o s t = 1 , c o s t n o r m = F N R P(+)cost=1,cost_{norm}=FNR P(+)cost=1,costnorm​=FNR。
FPR与FNR的连线上的任一点,其横坐标对应某一正概率代价 P ( + ) c o s t ∗ P(+)cost∗ P(+)cost∗,纵坐标就是在该正概率代价、 F P R FPR FPR、 F N R FNR FNR下的预期损失。
图中的阴影部分,也就是期望总体代价那一部分,可以说是在任一正例概率 p p p下,无论 F P R FPR FPR和 F N R FNR FNR如何变化,算法都必须付出的代价。

2.4 比较检验

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

统计假设检验(hypothesis test)为我们进行学习器性能提供了重要依据。基于假设检验结果我们可以推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。

2.4.1 假设检验

泛化错误率为 ϵ \epsilon ϵ的学习器在一个样本上犯错的概率是 ϵ \epsilon ϵ;测试错误率 ϵ ^ \hat{\epsilon} ϵ^意味着在 m m m个测试样本中,恰有 ϵ ^ × m \hat{\epsilon}\times m ϵ^×m个被误分类。假定测试集样本是从样本总体分布中独立采样而得,那么泛化误差率为 ϵ \epsilon ϵ的学习器将其中 m ′ m' m′个样本误分类、其余样本全部分类正确的概率是
( m m ′ ) ϵ m ′ ( 1 − ϵ ) m − m ′ ; \left( \begin{matrix} m \\ m' \end{matrix} \right)\epsilon^{m'}(1-\epsilon)^{m-m'}; (mm′​)ϵm′(1−ϵ)m−m′;
由此可估算出其恰将 ϵ ^ × m \hat{\epsilon}\times m ϵ^×m个样本误分类的概率如下式所示,这也表达了在包含在 m m m个样本的测试集上,泛化错误率为 ϵ \epsilon ϵ的学习器被测得测试错误率为 ϵ ^ \hat{\epsilon} ϵ^的概率:
P ( ϵ ^ ; ϵ ) = ( m ϵ ^ × m ) ϵ ϵ × m ^ ( 1 − ϵ ) m − ϵ ^ × m . P(\hat{\epsilon};\epsilon)= \left( \begin{matrix} m \\ \hat{\epsilon}\times m \end{matrix} \right)\epsilon^{\hat{\epsilon\times m}}(1-\epsilon)^{m-\hat{\epsilon}\times m}. P(ϵ^;ϵ)=(mϵ^×m​)ϵϵ×m^​(1−ϵ)m−ϵ^×m.
给定测试错误率,则解 ∂ P ( ϵ ^ ; ϵ ) / ∂ ϵ = 0 \partial P(\hat{\epsilon};\epsilon)/\partial \epsilon=0 ∂P(ϵ^;ϵ)/∂ϵ=0可知, P ( ϵ ^ ; ϵ ) P(\hat{\epsilon};\epsilon) P(ϵ^;ϵ)在 ϵ ^ = ϵ \hat{\epsilon}=\epsilon ϵ^=ϵ时最大, ∣ ϵ − ϵ ^ ∣ |\epsilon-\hat{\epsilon}| ∣ϵ−ϵ^∣增大时 P ( ϵ ^ ; ϵ ) P(\hat{\epsilon};\epsilon) P(ϵ^;ϵ)减小。这符合二项分布,如下图所示,若 ϵ = 0.3 \epsilon=0.3 ϵ=0.3,则10个样本中测得3个被误分类的概率最大。

我们可使用“二项检验”来对 ϵ ≤ 0.3 \epsilon \le0.3 ϵ≤0.3(即“泛化错误率是否不大于0.3”)这样的假设进行检验。更一般的,考虑假设 ϵ ≤ ϵ 0 \epsilon\le \epsilon_0 ϵ≤ϵ0​,则在 1 − α 1-\alpha 1−α的概率内所能观测到的最大错误率如下式计算。这里 1 − α 1-\alpha 1−α反映了结论的“置信度”,直观的来看,相应于上图中非阴影部分的范围。
ϵ ‾ = m a x ϵ s . t . ∑ i = ϵ 0 × m + 1 m ( m i ) ϵ i ( 1 − ϵ ) m − i ≤ α \overline{\epsilon}=max \quad\epsilon \quad s.t.\sum^m_{i=\epsilon_0\times m+1} \left( \begin{matrix} m \\ i \end{matrix} \right) \epsilon^i(1-\epsilon)^{m-i}\le \alpha ϵ=maxϵs.t.i=ϵ0​×m+1∑m​(mi​)ϵi(1−ϵ)m−i≤α
此时,若测试错误率 ϵ ^ \hat{\epsilon} ϵ^小于临界值 ϵ ‾ \overline{\epsilon} ϵ,则根据二项检验可得出结论:在 α \alpha α的显著度下,假设“ ϵ ≤ ϵ 0 \epsilon\le \epsilon_0 ϵ≤ϵ0​”不能被拒绝,即能以 1 − α 1-\alpha 1−α的置信度认为,学习器的泛化错误率不大于 ϵ 0 \epsilon_0 ϵ0​;否则,该假设可被拒绝,即在 α \alpha α的显著度下可认为学习器的泛化错误率大于 ϵ 0 \epsilon_0 ϵ0​。

在很多时候我们并非仅做一次留出法估计,而是通过多次重复留出法或是交叉验证法等进行多次训练/测试,这样会得到多个测试错误率,此时可使用“t检验”。假定我们得到了k个测试错误率, ϵ ^ 1 , ϵ ^ 2 , . . . , ϵ ^ k \hat{\epsilon}_1,\hat{\epsilon}_2,...,\hat{\epsilon}_k ϵ^1​,ϵ^2​,...,ϵ^k​,则平均测试错误率 μ \mu μ和方差 σ 2 \sigma^2 σ2为:
μ = 1 k = ∑ i = 1 k ϵ ^ i , \mu=\frac{1}{k}=\sum^k_{i=1}\hat{\epsilon}_i, μ=k1​=i=1∑k​ϵ^i​,
σ 2 = 1 k − 1 ∑ i = 1 k ( ϵ ^ i − μ ) 2 . \sigma^2=\frac{1}{k-1}\sum^k_{i=1}(\hat{\epsilon}_i-\mu)^2. σ2=k−11​i=1∑k​(ϵ^i​−μ)2.
考虑到这k个测试错误率可看做泛化错误率 ϵ 0 \epsilon_0 ϵ0​的独立采样,则变量
τ t = k ( μ − ϵ 0 ) σ \tau_t=\frac{\sqrt{k}(\mu-\epsilon_0)}{\sigma} τt​=σk ​(μ−ϵ0​)​
服从自由度为 k − 1 k-1 k−1的 t t t分布,如下图所示:

对假设“ μ = ϵ 0 \mu=\epsilon_0 μ=ϵ0​”和显著度 α \alpha α,我们可计算出当测试错误率均值为 ϵ 0 \epsilon_0 ϵ0​时,在 1 − α 1-\alpha 1−α概率内观测到的最大错误率,即临界值。这里仅考虑双边假设,如上图所示,两边阴影各有 α / 2 \alpha/2 α/2的面积;假定阴影部分范围分别为 ( − ∞ , t − α / 2 ] (-\infty,t_{-\alpha/2}] (−∞,t−α/2​]和 [ t α / 2 , ∞ ) [t_{\alpha/2},\infty) [tα/2​,∞)。若平均错误率 μ \mu μ与 ϵ 0 \epsilon_0 ϵ0​之差 ∣ μ − ϵ 0 ∣ |\mu-\epsilon_0| ∣μ−ϵ0​∣位于临界值范围 [ t − α / 2 , t α / 2 ] [t_{-\alpha/2},t_{\alpha/2}] [t−α/2​,tα/2​]内,则不能拒绝假设“ μ = ϵ 0 \mu=\epsilon_0 μ=ϵ0​”,即可认为泛化错误率为 ϵ 0 \epsilon_0 ϵ0​,置信度为 1 − α 1-\alpha 1−α;否则可拒绝该假设,即在该显著度下可认为泛化错误率与 ϵ 0 \epsilon_0 ϵ0​有显著不同。 α \alpha α常用取值有0.05和0.1,下表给出了一些常用临界值。

α k
2 5 10 20 30
0.05 12.706 2.776 2.262 2.093 2.045
0.10 6.314 2.132 1.833 1.729 1.699

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

2.4.2 交叉验证t检验

对两个学习器A和B,若我们使用 k k k折交叉验证法得到的测试错误率分别为: ϵ 1 A , ϵ 2 A , . . . , ϵ k A \epsilon^A_1,\epsilon^A_2,...,\epsilon^A_k ϵ1A​,ϵ2A​,...,ϵkA​和 ϵ 1 B , ϵ 2 B , . . . , ϵ k B \epsilon^B_1,\epsilon^B_2,...,\epsilon^B_k ϵ1B​,ϵ2B​,...,ϵkB​,其中 ϵ i B \epsilon^B_i ϵiB​与 ϵ i A \epsilon^A_i ϵiA​是在相同的第 i i i折训练/测试集上得到的结果,则可用 k k k折交叉验证“成对 t t t检验”来进行对比检验。这里的基本思想是若两个学习器的性能相同,则他们使用相同的训练/测试集得到的的错误率应相同,即 ϵ i A = ϵ i B \epsilon^A_i=\epsilon^B_i ϵiA​=ϵiB​。

具体来说,对 k k k折交叉验证产生的 k k k折错误率:先对每对结果求查, Δ i = ϵ i A − ϵ i B \Delta_i=\epsilon^A_i-\epsilon^B_i Δi​=ϵiA​−ϵiB​;若两个学习器性能相同,则差值均值应为0.因此,可根据差值 Δ 1 , Δ 2 , . . . , Δ k \Delta_1,\Delta_2,...,\Delta_k Δ1​,Δ2​,...,Δk​来对“学习器A与B性能相同”这个假设做 t t t检验,计算出差值的均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,在显著度 α \alpha α下,若变量
τ t = ∣ k μ σ ∣ \tau_t=|\frac{\sqrt{k}\mu}{\sigma}| τt​=∣σk ​μ​∣
小于临界值 t α / 2 , k − 1 t_{\alpha/2,k-1} tα/2,k−1​,则假设不能被拒绝,即认为两个学习器的性能没有显著差别;否则可认为两个学习器的性能有显著差别,且平均错误率较小的那个学习器性能较优。这里 t α / 2 , k − 1 t_{\alpha/2,k-1} tα/2,k−1​是自由度为 k − 1 k-1 k−1的 t t t分布尾部累积分布为 α / 2 \alpha/2 α/2的临界值。

欲进行有效的假设检验,一个重要前提是测试错误率均为泛化错误率的独立采样。然而,通常情况下由于样本有限,在使用交叉验证等实验估计方法时,不同轮次的训练集会有一定程度的重叠,这就是使得测试错误率实际上并不成立,会导致过高估计假设成立的概率。为缓解这个问题,可采用“ 5 × 2 5\times 2 5×2交叉验证”法。

5 × 2 5\times 2 5×2交叉验证是做5次2折交叉验证,在每次2折交叉验证之前随机将数据打乱,使得5次交叉验证中的数据划分不重复。对两个学习器A和B。第 i i i次2折交叉验证将产生两对测试错误率,我们对他们分别求差,得到第1折上的差值 Δ i 1 \Delta^1_i Δi1​和第2折上的差值 Δ i 2 \Delta^2_i Δi2​。为缓解测试错误率的非独立性,我们仅计算第1次2折交叉验证的两个结果的平均值 μ = 0.5 ( Δ 1 1 + Δ 1 2 ) \mu=0.5(\Delta^1_1+\Delta^2_1) μ=0.5(Δ11​+Δ12​),但对每次2折实验的结果都计算出其方差 σ i 2 = ( Δ i 1 − Δ i 1 + Δ i 2 2 ) 2 + ( Δ i 2 − Δ i 1 + Δ i 2 2 ) 2 \sigma^2_i=(\Delta^1_i-\frac{\Delta^1_i+\Delta^2_i}{2})^2+(\Delta^2_i-\frac{\Delta^1_i+\Delta^2_i}{2})^2 σi2​=(Δi1​−2Δi1​+Δi2​​)2+(Δi2​−2Δi1​+Δi2​​)2,变量
τ t = μ 0.2 ∑ i = 1 5 σ i 2 \tau_t=\frac{\mu}{\sqrt{0.2\sum^5_{i=1}\sigma^2_i}} τt​=0.2∑i=15​σi2​ ​μ​
服从自由度为5的 t t t分布,其双边检验的临界值 t α / 2 , 5 t_{\alpha/2,5} tα/2,5​,当 α = 0.05 \alpha=0.05 α=0.05时为2.5706, α = 0.1 \alpha=0.1 α=0.1时为2.0150。

2.4.3 McNemar检验

对二分类问题,使用留出法不仅可估计出学习器A和B的测试错误率,还可获得两学习器分类结果的差别,即两者都正确、都错误、一个正确另一个错误的样本数,如“列联表”所示:

算法B 算法A
正确 错误
正确 e 00 e 01 ​
错误 e 10 ​ e 11 ​

若我们做的假设是两学习器性能相同,则应有 e 01 = e 10 e_{01}=e_{10} e01​=e10​,那么变量 ∣ e 01 − e 10 ∣ |e_{01}-e_{10}| ∣e01​−e10​∣应当服从正态分布。McNemar检验考虑变量
τ χ 2 = ( ∣ e 01 − e 10 ∣ − 1 ) 2 e 01 + e 10 \tau_{\chi^2}=\frac{(|e_{01}-e_{10}|-1)^2}{e_{01}+e_{10}} τχ2​=e01​+e10​(∣e01​−e10​∣−1)2​
服从自由度为1的 χ 2 \chi^2 χ2分布,即标准正态分布变量的平方。给定显著度 α \alpha α,当以上变量值小于临界值 χ α 2 \chi^2_{\alpha} χα2​时,不能拒绝假设,即认为两学习器的性能没有显著差别;否则拒绝假设,即认为两者性能有显著差别,且平均错误率较小的那个学习器性能较优。自由度为1的 χ α 2 \chi^2_{\alpha} χα2​检验的临界值当 α = 0.05 \alpha=0.05 α=0.05时为3.8415, α = 0.1 \alpha=0.1 α=0.1时为2.7055.

2.5 偏差与方差

偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。对测试样本 x x x,令 y D y_D yD​为 x x x在数据集中的标记, y y y为 x x x的真实标记, f ( x ; D ) f(x;D) f(x;D)为训练集 D D D上学得模型 f f f在 x x x上的预测输出。已回归任务为例,学习算法的期望预测为
有可能出现噪声使得 y D ≠ y y_D\ne y yD​​=y.
f ‾ ( x ) = E D [ f ( x ; D ) ] , \overline{f}(x)=\mathbb{E}_D[f(x;D)], f​(x)=ED​[f(x;D)],
使用样本数相同的不同训练集产生的方差为
v a r ( x ) = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] , var(x)=\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2], var(x)=ED​[(f(x;D)−f​(x))2],
噪声为
ϵ 2 = E D [ ( y D − y ) 2 ] \epsilon^2=\mathbb{E}_D[(y_D-y)^2] ϵ2=ED​[(yD​−y)2]
期望输出与真实标记的差别被称为偏差,即
b i a s 2 ( x ) = ( f ‾ ( x ) − y ) 2 bias^2(x)=(\overline{f}(x)-y)^2 bias2(x)=(f​(x)−y)2
为便于讨论,假定噪声期望为零,即 E D [ y D − y ] = 0 \mathbb{E}_D[y_D-y]=0 ED​[yD​−y]=0。通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:
E ( f ( x ) ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ‾ ( x ) + f ‾ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] + E D [ ( f ‾ ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f ‾ ( x ) ) ( f ‾ ( x ) − y D ) ] = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] + E D [ ( f ‾ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] + E D [ ( f ‾ ( x ) − y + y − y D ) 2 ] = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] + E D [ ( f ‾ ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + 2 E D [ ( f ‾ ( x ) − y ) ( y − y D ) ] = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] + ( f ‾ ( x ) − y ) 2 + E D [ ( y D − y ) 2 ] , \begin{aligned} E(f(x);D)=&\mathbb{E}_D[(f(x;D)-y_D)^2] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x)+\overline{f}(x)-y_D)^2] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+\mathbb{E}_D[(\overline{f}(x)-y_D)^2] \\ &+\mathbb{E}_D[2(f(x;D)-\overline{f}(x))(\overline{f}(x)-y_D)] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+\mathbb{E}_D[(\overline{f}(x)-y_D)^2] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+\mathbb{E}_D[(\overline{f}(x)-y+y-y_D)^2] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+\mathbb{E}_D[(\overline{f}(x)-y)^2]+\mathbb{E}_D[(y-y_D)^2] \\ &+2\mathbb{E}_D[(\overline{f}(x)-y)(y-y_D)] \\ =&\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+(\overline{f}(x)-y)^2+\mathbb{E}_D[(y_D-y)^2], \end{aligned} E(f(x);D)=======​ED​[(f(x;D)−yD​)2]ED​[(f(x;D)−f​(x)+f​(x)−yD​)2]ED​[(f(x;D)−f​(x))2]+ED​[(f​(x)−yD​)2]+ED​[2(f(x;D)−f​(x))(f​(x)−yD​)]ED​[(f(x;D)−f​(x))2]+ED​[(f​(x)−yD​)2]ED​[(f(x;D)−f​(x))2]+ED​[(f​(x)−y+y−yD​)2]ED​[(f(x;D)−f​(x))2]+ED​[(f​(x)−y)2]+ED​[(y−yD​)2]+2ED​[(f​(x)−y)(y−yD​)]ED​[(f(x;D)−f​(x))2]+(f​(x)−y)2+ED​[(yD​−y)2],​
于是,
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ϵ 2 , E(f;D)=bias^2(x)+var(x)+\epsilon^2, E(f;D)=bias2(x)+var(x)+ϵ2,
也就是说,泛化误差可分解为偏差、方差与噪声之和。

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

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

关于偏差与方差对泛化错误率的影响,看参考下图:

第二章——模型评估与选择相关推荐

  1. 【读书笔记】周志华 机器学习 第二章 模型评估和选择

    第二章 模型评估和选择 1 欠拟合和过拟合 偏差和方差 1.1 欠拟合和过拟合 1.2 偏差和方差 2 评估方法 性能度量 2.1 评估方法 2.1.1 留出法 2.2.2 交叉验证法 2.2.3 自 ...

  2. 小吴的《机器学习 周志华》学习笔记 第二章 模型评估与选择

    小吴的<机器学习 周志华>学习笔记 第二章 模型评估与选择 上一周我们介绍了第一章的基础概念,这一次将带来第二章的前三节.后面的2.4 比较检验与2.5 偏差与方差,涉及概率论与数理统计概 ...

  3. 《机器学习》周志华 第二章——模型评估与选择笔记

    <机器学习>周志华 第二章--模型评估与选择 过拟合和欠拟合 过拟合:对训练数据拟合过当的情况,训练集表现很好,测试集表现差. 欠拟合:模型在训练和预测时都表现不好. 降低过拟合的方法: ...

  4. 机器学习总结之第二章模型评估与选择

    [第2章 模型评估与选择] [一.知识点归纳] 一.经验误差与过拟合 [分类]:对是离散值的结果进行预测. [回归]:对是连续值的结果进行预测. 分类和回归属于监督学习. [错误率]:分类错误的样本数 ...

  5. 西瓜书第二章 模型评估与选择

    第2章 模型评估与选择 2.1 经验误差与过拟合 学习器在训练集上的误差称为"训练误差"或"经验误差",在新样本上的误差称为"泛化误差":过 ...

  6. [西瓜书习题] 第二章 模型评估与选择

    2.1 数据集包含1000个样本,其中500个正例,500个反例,将其划分为包含70%样本的训练集和30%样本的测试集用于留出法评估,试估算共有多少种划分方式. 留出法将数据集划分为两个互斥的集合,为 ...

  7. 《机器学习》 周志华学习笔记第二章 模型评估与选择(课后习题)

    模型选择与评估 一.内容 1.经验误差与过拟合 1.1 学习器在训练集上的误差称为训练误差(training error),在新样本上的误差称为泛化误差(generalizion error). 1. ...

  8. 博士笔记 | 周志华《机器学习》手推笔记第二章-模型评估与选择

    笔记pdf开源地址:https://github.com/Sophia-11/Machine-Learning-Notes 作者:王博Kings,985AI博士,CSDN博客专家,华为云专家,vx:K ...

  9. 吃瓜教程task01 第2章 模型评估与选择

    第二章 模型评估与选择 2022/5/15 雾切凉宫 至2.3.3节 2.1 经验误差与过拟合 中文名 英文名 意义 训练误差/经验误差 training error/empirical error ...

最新文章

  1. Java核心技术卷1——笔记(1)
  2. python loading_MXNet Python Data Loading API
  3. 宽度,对齐方式的设置
  4. Python-接口开发入门
  5. SWFUpload多文件上传,文件大小增大问题
  6. latex 基本用法(五)
  7. jQuery_层级选择器
  8. java--迭代(三)foreach解析与字节码
  9. 企业信息安全模型(成熟度模型)
  10. html学校代码怎么弄,学校代码查询网2020怎么查学校代码?查学校代码的方法
  11. 网站域名备案流程是什么样的?
  12. QQ语音对方会听到自己电脑声音
  13. 计算机一个小键盘按不出来怎么办,电脑小键盘打不出字怎么办?
  14. 粉屏门又一次显示出了苹果的傲慢
  15. 医疗等保2.0|新版测评标准对医疗行业网络安全等级保护提出了更高要求
  16. [Android]小米5刷root过程记录
  17. 受害者被锤 法官遭殃 背后的它公关赢了?
  18. C++: 判断两个数互质(最大公约数为1)
  19. ozip解密_ozip解包工具下载oppo刷机包ozip解包一加ops解包
  20. 怎么用matlab算磁滞,磁性材料磁化曲线和磁滞回线的Matlab绘制与拟合.doc

热门文章

  1. WebRequest 超时不起作用
  2. 为什么数字化转型,必须是“一把手”工程?
  3. 也谈信息化建设中的“一把手”
  4. 日语二级语法 解惑03
  5. 我是一个Java class
  6. STM32 —— RT-Thread Nano 移植
  7. 根据基因名称查看基因详细信息的网址
  8. 几步教会你螺母拧出螺栓动画
  9. 学习Tensorflow之基本操作
  10. 解决uView添加自定义图标不成功