在机器学习过程中,我们将学习器的实际输出 f ( x ; D ) f(x;D) f(x;D) ( D D D为训练集)与样本的真实输出 y D y_{D} yD之间的差异称为“误差”。1
我们称学习器在训练集上的误差称之为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。
大部分情况下,我们可以获得一个在训练集上表现很好,经验误差非常小的学习器。然而,当一个学习器对训练集拟合程度非常好时,往往意味着它学习了训练集中那些并不普遍的规律。因而在面对新样本时产生了错判,导致学习器的泛化能力下降。这种现象在机器学习中被成为“过拟合”(overfitting)现象。与之相对的是“欠拟合”(underfitting)现象,即学习器未能很好地学习样本的普遍规律。
我们训练学习器的目的是为了获取泛化能力较好的模型。然而,我们无法直接获得泛化误差,而对训练集的误差评估又存在过拟合等问题。因此,我们需要讨论针对模型的评估方法,以获取表现较好的模型。
为了评估模型的泛化能力,我们将数据集 D D D进行适当的处理,分为训练集 S S S(training set)和测试集 T T T(testing set)。接下来讨论几种常见的划分数据集的方法。
“留出法”(hold-out)将数据集 D D D划分为两个互斥的集合。其中一个作为训练集 S S S,另一个作为测试集 T T T。即 S ∪ T = D S\cup T = D S∪T=D且 S ∩ T = ∅ S \cap T = \varnothing S∩T=∅。
需要注意的是,在划分数据集时需要尽可能保持数据分布的一致性,避免在数据划分过程中引入额外的偏差。一般采用“分层采样”(stratified sampling)的方式划分数据集。
为了避免单次留出法估计结果的偶然误差,一般采用若干次随机划分、重复进行实验评估后取平均值作为最终结果。
在划分数据集时,我们希望训练集 S S S足够大以更接近 D D D的普遍规律;也希望测试集 T T T足够大以避免偶然误差。一般采取2/3 ~ 4/5的样本用于训练集,剩余的用于测试集。
“交叉验证法”(cross validation)将数据集划分为 k k k个大小相近的互斥子集 D 1 , D 2 , . . . , D k D_{1},D_{2},...,D_{k} D1,D2,...,Dk 。有 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} = \varnothing (i \neq j) D=D1∪D2∪...∪Dk,Di∩Dj=∅(i=j)。每次取 k − 1 k-1 k−1个子集用于训练集,余下的子集用于测试集。最终返回这 k k k个测试结果的平均值。
交叉验证法评估结果的稳定性和保真性很大程度上取决于 k k k的取值,所以也称交叉验证法为“ k k k折交叉验证”(k-fold cross validation)。 k k k最常用的取值为10;也经常取值为5、20等。
当每次评估只取一个样本作为测试集时,则得到交叉验证法的一个特例:留一法(Leave-One-Out, 简称LOO)。由于留一法的测试集与数据集 D D D只差一个样本,所以留一法的评估结果往往被认为比较准确。然而,当数据集比较大时,训练模型的计算开销可能难以承受。
当我们难以对数据集进行有效划分且无法承担留一法的巨大计算开销时,可以采用“自助法”(bootstrapping)。对于给定数据集 D D D ,对其进行 m m m次有放回的抽样,获得包含 m m m个(可能出现重复样本的)数据集 D ′ D' D′ 。
可以计算某样本在m次抽样中始终不被抽到的概率为 ( 1 − 1 m ) m (1 - \frac{1}{m})^{m} (1−m1)m。取极限得
lim x → ∞ ( 1 − 1 m ) m . \lim_{x\rightarrow \infty }(1 - \frac{1}{m})^{m}. x→∞lim(1−m1)m.
而实际中 D ∖ D ′ D\setminus D' D∖D′ 的样本数期望为 m ( 1 − 1 m ) m m(1 - \frac{1}{m})^{m} m(1−m1)m。取 D ′ D' D′ 为训练集, D ∖ D ′ D\setminus D' D∖D′ 为测试集。这样,实际评估的模型与期望评估的模型都使用 m m m 个训练样本,而我们仍然有占样本总数约1/3的未出现在训练集中的样本用于测试。这种测试结果,亦称“包外估计”(out-of-bag estimate)。
自助法在数据集较小、难以有效划分训练集/测试集时很有用。此外,自助法可以产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法改变了数据集的分布,会引入估计偏差。因此,当初始数据量足够时,留出法和交叉验证法更常用一些。
大多数学习算法都有参数。这些参数的设置对于模型的效果有着非常显著的影响。因此,除了对适用的学习算法进行选择外,还需要对算法参数进行设定。一般对于实数范围内取值的参数,常常采用选定范围和变化步长的方式来进行调参。
在建立模型过程中,我们将数据集 D D D 划分为训练集与测试集,即每次只采用了一部分数据训练模型。在模型选择完成后,学习算法与参数配置已经选定。此时应该用数据集 D D D 重新训练模型并提交给用户。
在之前的评估方法介绍中,我们将数据集划分为训练数据与测试集。并用测试数据来估计模型在实际使用时的泛化能力。因此,我们需要将训练数据划分为训练集与验证集(validation set),基于验证集上的性能来进行模型选择和调参。(可以根据划分训练数据/测试数据的方法来划分训练集/验证集)。
数据集 | ||
训练数据 | 测试数据 | |
训练集 | 验证集 | 测试集 |
为了评估学习器的泛化性能,除了有效可行的实验估计方法,还需要衡量模型泛化能力的评价标准,即性能度量(performance measure)。
在预测任务中,给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D = \left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \right \} D={(x1,y1),(x2,y2),...,(xm,ym)},学习器的预测结果为 f ( x ) f(x) f(x)。在回归模型中,最常用的性能度量为“均方误差”(mean squared error)
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 . E(f;D) = \frac{1}{m}\sum_{i=1}^{m}(f(x_{i}) - y_{i})^{2}. E(f;D)=m1i=1∑m(f(xi)−yi)2.
对于数据分布 D \mathfrak{D} D和概率密度函数 p ( . ) p(.) p(.),均方误差可描述为
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x . E(f;\mathfrak{D}) = \int_{x\sim \mathfrak{D}}(f(x) - y)^{2}p(x)dx. E(f;D)=∫x∼D(f(x)−y)2p(x)dx.
接下来将介绍分类任务中常用的性能度量
对于样例集 D D D,分类错误率定义为
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ≠ y i ) . E(f;D) = \frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_{i} \neq y_{i}). E(f;D)=m1i=1∑mI(f(xi=yi).
精度定义为
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i = y i ) = 1 − E ( f ; D ) acc(f;D) = \frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_{i} = y_{i}) \newline = 1 - E(f;D) acc(f;D)=m1i=1∑mI(f(xi=yi)=1−E(f;D)
更一般地,对于数据分布 D \mathfrak{D} D和概率密度函数 p ( . ) p(.) p(.),错误率和精度为
E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x , a c c ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x . E(f;\mathfrak{D}) = \int_{x\sim \mathfrak{D}}\mathbb{I}(f(x)\neq y)p(x)dx,\newline acc(f;\mathfrak{D}) = \int_{x\sim \mathfrak{D}}\mathbb{I}(f(x) = y)p(x)dx. E(f;D)=∫x∼DI(f(x)=y)p(x)dx,acc(f;D)=∫x∼DI(f(x)=y)p(x)dx.
查准率(precision)用于衡量“检索出的信息中用户感兴趣的比例”
查全率(recall)用于衡量“用户感兴趣的信息被检索出来的比例”
考虑一个二分类的问题。假设用户感兴趣的信息为正例。因此,我们的学习器应当检索并向用户推荐正例。对于学习器而言,其预测结果可分为以下四类:
真实情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
则查准率P与查全率R的定义为:
P = T P T P + F P , R = T P T P + F N . P = \frac{TP}{TP + FP},\\ R = \frac{TP}{TP + FN}. P=TP+FPTP,R=TP+FNTP.
查准率和查全率是一对矛盾的度量。当我们将所有的样本选中,则所有用户感兴趣的样本也都被选中了,但这样查准率就比较低。而若是只挑选那些非常有把握的样本,查准率会较高,然而选中的样本占用户感兴趣的样本总量的比例就会降低,查全率也低了。
通常,我们可以根据学习器的预测结果(比方说预测用户感兴趣的概率大小)按照由高到低的顺序进行排序。按此顺序逐个将样本作为正例进行预测。(比方说逐次将某个概率以上的样本预测为正例),并计算出当前的查全率、查准率。以查准率为纵轴,查全率为横轴作图,就得到查准率-查全率曲线,简称“P-R曲线”。并取查准率=查重率的点为平衡点。
综合考率学习器查准率、查全率的性能度量有
当我们有多个二分类混淆矩阵时,可以有如下思路综合考察查准率与查重率
通常,我们根据学习器的预测结果(比方说预测用户感兴趣的概率大小)按照由高到低的顺序进行排序。并在这个排序中选取一个“截断点”(cut point)将1样本分为两部分。前一部分判定为正例,后一部分判定为反例。
我们可以根据任务需求来采用不同截断点。若我们更重视“查准率”,则可以选择排序靠前的位置进行截断。反之则选择排序靠后的。因此,排序质量的好坏体现了学习器在“一般情况下”泛化性能的好坏。ROC(Receiver Operating Characteristic, “受试者工作特征”)曲线就是从排序质量的角度出发研究学习器泛化性能的工具。
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 T\!P\!R = \frac{TP}{TP + FN}\newline F\!P\!R = \frac{FP}{TN + FP} TPR=TP+FNTPFPR=TN+FPFP
以TPR值为纵轴,FPR值为横轴,作出POC曲线
显然,此图中对角线对应“随即猜测”模型,而点(0,1)对应于将所有正例排在所有反例之前的“理想模型”。
现实中我们使用有限个测试样例绘制POC图。若给定 m + m^{+} m+个正例和 m − m^{-} m−个反例,根据学习器预测值进行排序。先将分类阈值设为最大,此时TPR和FPR都为0(TP和FP为0),在坐标(0,0)处标记一个点。随后依次将分类阈值设为每个样例的预测值,使其判断为正例。设前一个标记点坐标为 ( x , y ) (x,y) (x,y),若当前为真正例,则对应标记点坐标为 ( 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)。然后用线段连接相邻点。效果如下图
衡量学习器泛化能力的一个比较合理的判据是POC曲线下的面积,即AUC(Area Under POC Curve)。若设POC曲线由坐标为 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } \left\{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n}) \right\} {(x1,y1),(x2,y2),...,(xn,yn)}的点按序连接而成,则有
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) AU\!C = \frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_{i})\cdot(y_{i} + y_{i+1}) AUC=21i=1∑m−1(xi+1−xi)⋅(yi+yi+1)
由于AUC考虑的是样本预测的排序质量,因此与排序误差有较强的联系。给定 m + m^{+} m+和 m − m^{-} m−个正例和反例,令 D + D^{+} D+和 D − D^{-} D−表示正、反例集合,则排序“损失”(loss)定义为
ι r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( I ( f ( x + ) < f ( x − ) ) + 1 2 I ( f ( x + ) = f ( x − ) ) ) \iota_{rank} = \frac{1}{m^{+}m^{-}}\sum_{x^{+}\in D^{+}}\sum_{x^{-}\in D^{-}}\left(\mathbb{I}(f(x^{+}) < f(x^{-})) + \frac{1}{2}\mathbb{I}(f(x^{+}) = f(x^{-})) \right) ιrank=m+m−1x+∈D+∑x−∈D−∑(I(f(x+)<f(x−))+21I(f(x+)=f(x−)))
容易看出 A U C = 1 − ι r a n k AUC = 1 - \iota_{rank} AUC=1−ιrank
在现实任务中常会遇到这种情况:不同类型的错误造成的后果不同。如医院错将健康人误诊为病人,或将患者误诊为健康人。然而,这两种错误的代价并不一致。前者增加了进一步检查的麻烦,后者则可能造成患者错过治疗的最佳时期。为了权衡不同类型错误造成的损失,可以为错误赋予“非均等代价”(unequal cost)。
以二分类任务为例,可以根据任务设定一个代价矩阵。其中 c o s t i j cost_{ij} costij表示将第i类样本预测为第j类样本的代价。一般来说 c o s t i i = 0 cost_{ii} = 0 costii=0。错判的代价越大,则 c o s t i j cost_{ij} costij也越大。通过代价的比值来衡量不同错判的损失程度相差。(一般情况下,重要的是比值而非绝对值。如$ c o s t 01 : c o s t 10 = 5 : 1 cost_{01}:cost_{10} = 5:1 cost01:cost10=5:1与 50 : 10 50:10 50:10的效果相同)。
真实类别 | 预测类别 | |
第0类 | 第1类 | |
第0类 | 0 | cost01 |
第1类 | cost10 | 0 |
在非均等条件下,我们希望最小化“总体代价”(total cost)。若将第0类作为正例,第1类作为反例。令 D + D^{+} D+和 D − D^{-} D−作为正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × c o s t 10 ) . E(f;D;cost) = \frac{1}{m}\left(\sum_{x_{i} \in D^{+}}\mathbb{I}(f(x_{i}) \neq y_{i}) \times cost_{01} + \sum_{x_{i} \in D^{-}} \mathbb{I}(f(x_{i}) \neq y_{i}) \times cost_{10} \right). E(f;D;cost)=m1(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(f(xi)=yi)×cost10).
也可类似地定义多任务的代价敏感性能度量。
在非均等条件下,我们通过“代价曲线”(cost curve)反映学习器的期望总体代价。代价曲线图的横轴为取值为[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)×cost10p×cost01
其中 p p p是样例为正例的概率,纵轴是取值为[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{F\!N\!R \times p \times cost_{01} + F\!P\!R \times (1-p) \times cost_{10}}{p \times cost_{01} + (1-p) \times cost_{10}} costnorm=p×cost01+(1−p)×cost10FNR×p×cost01+FPR×(1−p)×cost10
其中 F P R F\!P\!R FPR为假正例率, F N R = 1 − F P R F\!N\!R=1-F\!P\!R FNR=1−FPR为假反例率。 c o s t n o r m cost_{norm} costnorm曲线下围成的面积即为学习器的期望总体代价。
对于学习器之间的比较而言,我们希望比较其泛化性能,然而通过实验评估的方法我们获得的是测试集上的性能。二者的比对结果可能未必相同。
这种情况下,统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。为了便于讨论,采取错误率为性能度量,用 ϵ \epsilon ϵ表示。
在现实任务中,我们无法直接获知学习器的泛化错误率,只能获知其测试错误率 ϵ ^ \hat{\epsilon} ϵ^。对于一个学习器而言,泛化错误率表示学习器在一个样本上犯错的概率为 ϵ \epsilon ϵ,测试错误率 ϵ ^ \hat{\epsilon} ϵ^表示在 m m m个样本中恰有 ϵ ^ × m \hat{\epsilon} \times m ϵ^×m个被误分类。假定测试样本是从样本总体分布中独立采样而得,则泛化错误率为 ϵ \epsilon ϵ的学习器将其中 m ′ m' m′个样本误分类、其余样本全部分类正确的概率为 ( m m ′ ) ϵ m ′ ( 1 − ϵ ) m − m ′ \binom{m}{m'}\epsilon^{m'}(1-\epsilon)^{m - m'} (m′m)ϵm′(1−ϵ)m−m′。则该学习器恰将 ϵ ^ × m \hat{\epsilon} \times m ϵ^×m个样本误分类的概率为
P ( ϵ ^ ; ϵ ) = ( m ϵ ^ × m ) ϵ ϵ ^ × m ( 1 − ϵ ) m − ϵ ^ × m P(\hat{\epsilon};\epsilon)=\binom{m}{\hat{\epsilon} \times m}\epsilon^{\hat{\epsilon} \times m}(1 - \epsilon)^{m - \hat{\epsilon} \times m} P(ϵ^;ϵ)=(ϵ^×mm)ϵϵ^×m(1−ϵ)m−ϵ^×m
对于给定 ϵ ^ \hat{\epsilon} ϵ^,可解 ∂ P ( ϵ ^ ; ϵ ) / ∂ ϵ = 0 \partial P(\hat{\epsilon};\epsilon)/\partial \epsilon = 0 ∂P(ϵ^;ϵ)/∂ϵ=0可得 P ( ϵ ^ ; ϵ ) P(\hat{\epsilon};\epsilon) P(ϵ^;ϵ)在 ϵ = ϵ ^ \epsilon = \hat{\epsilon} ϵ=ϵ^处取得最大值,符合二项分布。那么对于泛化错误率,我们考虑假设 “ ϵ ≤ ϵ 0 ” “\epsilon \leq \epsilon_{0}” “ϵ≤ϵ0”,则在 1 − α 1 - \alpha 1−α的概率内能观测到的最大错误率为
ϵ ˉ = m i n ϵ s . t . ∑ i = ϵ 0 × m + 1 m ( m i ) ϵ i ( 1 − ϵ ) m − i < α \bar{\epsilon} = min \; \epsilon \quad s.t. \quad \sum_{i = \epsilon_{0}\times m + 1}^{m} \binom{m}{i}\epsilon^{i}(1-\epsilon)^{m-i} < \alpha ϵˉ=minϵs.t.i=ϵ0×m+1∑m(im)ϵi(1−ϵ)m−i<α
此处的 1 − α 1-\alpha 1−α反映了结论的“置信度”(confidence)。此时若测试错误率 ϵ ^ \hat{\epsilon} ϵ^小于临界值 ϵ ˉ \bar{\epsilon} ϵˉ,则根据二项检验可以得出结论:在 α \alpha α的显著度下,假设 “ ϵ ≤ ϵ 0 ” “\epsilon \leq \epsilon_{0}” “ϵ≤ϵ0”不能被拒绝,则能以 1 − α 1-\alpha 1−α的置信度认为,学习器泛化错误率不大于 ϵ 0 \epsilon_{0} ϵ0;否则该假设可被拒绝,即在 α \alpha α的显著度下认为学习器的泛化错误率大于 ϵ 0 \epsilon_{0} ϵ0。
对于多次训练/测试得到的多个错误率 ϵ ^ 1 , ϵ ^ 2 , . . . , ϵ ^ n \hat{\epsilon}_{1},\hat{\epsilon}_{2},...,\hat{\epsilon}_{n} ϵ^1,ϵ^2,...,ϵ^n,可以使用”t检验“(t-test)。可以得到平均测试错误率 μ \mu μ和方差 σ 2 \sigma^{2} σ2为
μ = 1 n ∑ i = 1 n ϵ ^ i , σ 2 = 1 n − 1 ∑ i = 1 n ( ϵ ^ i − μ ) 2 . \mu = \frac{1}{n}\sum_{i=1}^{n}\hat{\epsilon}_{i}, \newline \sigma^{2} = \frac{1}{n-1}\sum_{i=1}^{n}(\hat{\epsilon}_{i} - \mu)^{2}. μ=n1i=1∑nϵ^i,σ2=n−11i=1∑n(ϵ^i−μ)2.
考虑到这 n n n个测试错误率可以看作泛化错误率 ϵ 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 α,考虑双边(two-tailed)假设,这里两边阴影各有 α / 2 \alpha/2 α/2的面积;若令阴影部分分别为 ( − ∞ , t − α / 2 ] , [ t α / 2 , ∞ ) (-\infty,t_{-\alpha/2}],[t_{\alpha/2},\infty) (−∞,t−α/2],[tα/2,∞),则 τ t \tau_{t} τt位于临界范围 [ t − α / 2 , t α / 2 ] [t_{-\alpha/2},t_{\alpha/2}] [t−α/2,tα/2]内,则不能拒绝假设。下表为一些常用临界值。
α | 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 |
对两个学习器A和B,我们使用k折交叉验证法得到测试错误率分别为 ϵ 1 A , ϵ 2 A , . . . , ϵ k A \epsilon_{1}^{A},\epsilon_{2}^{A},...,\epsilon_{k}^{A} ϵ1A,ϵ2A,...,ϵkA和 ϵ 1 B , ϵ 2 B , . . . , ϵ k B \epsilon_{1}^{B},\epsilon_{2}^{B},...,\epsilon_{k}^{B} ϵ1B,ϵ2B,...,ϵkB。使用k折交叉验证“成对t检验”(paired t-tests)来进行比较检验。该检验的基本思想为若两个学习器相同,则它们使用相同的训练/测试集得到的测试错误率也应相同,即 ϵ i A = ϵ i B \epsilon_{i}^{A} = \epsilon_{i}^{B} ϵiA=ϵiB。
计算方法为先对每队结果求差 Δ i = ϵ i A − ϵ i B \Delta_{i} = \epsilon_{i}^{A} - \epsilon_{i}^{B} Δi=ϵiA−ϵiB。并计算出差值的均值 μ \mu μ和方差 σ 2 \sigma^{2} σ2,在显著度 α \alpha α下,若变量
τ t = ∣ k μ σ ∣ \tau_{t} = \left| \frac{\sqrt{k}\mu}{\sigma} \right| τ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折和第2折的差值 Δ i 1 , Δ i 2 \Delta_{i}^{1},\Delta_{i}^{2} Δi1,Δi2。为了缓解测试错误率的非独立性,仅计算第1次2折交叉验证的结果的平均值 μ = 0.5 ( Δ 1 1 + Δ 1 2 ) \mu = 0.5(\Delta_{1}^{1} + \Delta_{1}^{2}) μ=0.5(Δ11+Δ12),但对每次2折实验结果都计算出方差
σ 2 = ( Δ i 1 − Δ i 1 + Δ i 2 2 ) 2 + ( Δ i 2 − Δ i 1 + Δ i 2 2 ) 2 \sigma^{2} = \left(\Delta_{i}^{1} - \frac{\Delta_{i}^{1} + \Delta_{i}^{2}}{2} \right)^{2} + \left(\Delta_{i}^{2} - \frac{\Delta_{i}^{1} + \Delta_{i}^{2}}{2} \right)^{2} σ2=(Δ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_{i=1}^{5}\sigma_{i}^{2}}} τt=0.2∑i=15σi2μ
服从自由度为4的t分布,其双边检验的临界值 t α / 2 , 5 t_{\alpha/2,5} tα/2,5当 α \alpha α = 0.05时为2.776, α \alpha α = 0.1时为2.132。
对二分类问题,使用留出法可以列出两学习器分类结果的差别
算法B | 算法A | |
正确 | 错误 | |
正确 | e00 | e01 |
错误 | e10 | e11 |
若假设两学习器性能相同,应有 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} χ2检验的临界值当 α \alpha α=0.05时为3.8415, α \alpha α=0.1时为2.7055。
当有多个算法参与比较时,我们采用基于算法排序的Friedman检验。先根据留出法或交叉验证法对每个数据集上的性能进行测试并依次排序(1、2、3…)。如果性能相同则取平均值。假定我们在 N N N个数据集上比较 k k k个算法,令 r i r_{i} ri表示第 i i i个算法的平均序值,则 r i r_{i} ri的均值和方差分别为 ( k + 1 ) / 2 (k+1)/2 (k+1)/2和 ( k 2 − 1 ) / 12 N (k^{2}-1)/12N (k2−1)/12N。变量
τ χ 2 = k − 1 k ⋅ 12 N k 2 − 1 ∑ i = 1 k ( r i − k + 1 2 ) 2 = 12 N k ( k + 1 ) ( ∑ i = 1 k r i 2 − k ( k + 1 ) 2 4 ) τ F = ( N − 1 ) τ χ 2 N ( k − 1 ) − τ χ 2 \tau_{\chi^{2}} = \frac{k-1}{k}\cdot\frac{12N}{k^{2}-1}\sum_{i=1}^{k}\left(r_{i} - \frac{k+1}{2} \right)^{2} \newline =\frac{12N}{k(k+1)}\left(\sum_{i=1}^{k}r_{i}^{2}-\frac{k(k+1)^{2}}{4} \right)\newline \tau_{F} = \frac{(N-1)\tau_{\chi^{2}}}{N(k-1) - \tau_{\chi^{2}}} τχ2=kk−1⋅k2−112Ni=1∑k(ri−2k+1)2=k(k+1)12N(i=1∑kri2−4k(k+1)2)τF=N(k−1)−τχ2(N−1)τχ2
τ F \tau_{F} τF服从自由度为 k − 1 k-1 k−1和 ( k − 1 ) ( N − 1 ) (k-1)(N-1) (k−1)(N−1)的 F F F分布。
若“所有算法性能相同”的假设被拒绝,则说明算法性能显著不同。此次需要“后续检验”(post-hoc test)来进一步区分各算法。如Nemenyi后续检验,其平均序值差别的临界区域为
C D = q α k ( k + 1 ) 6 N CD = q_{\alpha}\sqrt{\frac{k(k+1)}{6N}} CD=qα6Nk(k+1)
若两算法的平均序值之差超过了临界值域 C D CD CD,则拒绝“两算法性能相同”的假设。
对测试样本 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上的预测输出。
以回归方程为例,学习算法的期望预测为
f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{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}\left[\left(f(x;D)-\bar{f}(x) \right)^{2} \right] var(x)=ED[(f(x;D)−fˉ(x))2]
噪声为
ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^{2} = \mathbb{E}_{D}\left[(y_{D} - y)^{2} \right] ε2=ED[(yD−y)2]
期望输出与真实标记的差别称为偏差(bias),即
b i a s 2 ( x ) = ( f ˉ ( x ) − y ) 2 bias^{2}(x) = \left(\bar{f}(x) - y \right)^{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 ; 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 [ ( f ˉ ( x ) − y ) 2 ] + 2 E D [ ( f ˉ ( x ) − y ) ( y − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y ) 2 ] + E D [ ( y D − y ) 2 ] \begin{aligned} E(f;D) &= \mathbb{E}_{D}\left[\left(f(x;D) - y_{D} \right)^{2} \right] \\ & = \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) + \bar{f}(x) - y_{D} \right)^{2} \right] \\ & = \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y_{D} \right)^{2} \right]\\ &\quad \;+ \mathbb{E}_{D}\left[2\left(f(x;D) - \bar{f}(x) \right)\left(\bar{f}(x) - y_{D} \right) \right] \\ &= \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y_{D} \right)^{2} \right]\\ &= \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y + y - y_{D} \right)^{2} \right]\\ &= \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y \right)^{2} \right]\\ &\quad \; + 2\mathbb{E}_{D}\left[\left(\bar{f}(x) - y \right)(y-y_{D}) \right]\\ &= \mathbb{E}_{D}\left[\left(f(x;D) - \bar{f}(x) \right)^{2} \right] + \mathbb{E}_{D}\left[\left(\bar{f}(x) - y \right)^{2} \right] + \mathbb{E}_{D}\left[\left(y_{D} - y \right)^{2} \right] \end{aligned} E(f;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[(fˉ(x)−y)2]+2ED[(fˉ(x)−y)(y−yD)]=ED[(f(x;D)−fˉ(x))2]+ED[(fˉ(x)−y)2]+ED[(yD−y)2]
即
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ε 2 \mathbb{E}(f;D) = bias^{2}(x) + var(x) + \varepsilon^{2} E(f;D)=bias2(x)+var(x)+ε2
即泛化误差可以分解为偏差、方差与噪声之和。其中偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习任务本身的难度。
一般来说,偏差和方差是有冲突的。这被称为偏差-方差窘境(bias-variance dilemma)。对于一个学习任务,在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率。训练程度较深时,拟合能力加强,训练数据的扰动能被学习器学到,则方差开始主导了泛化错误率。若训练数据自身的、非全局的特性被学习器学到了,则会发生过拟合现象。
需要注意,这里假设训练集中的输出 y D y_{D} yD为真实输出,不包含噪声。 ↩︎