西瓜书第二章-模型评估与选择
- 前言
- 一、经验误差与拟合
- 二、评估方法
-
- 1.留出法
- 2.交叉验证法
- 3.自主法
- 4.调参与最终模型
- 三、性能度量
-
- 1.错误率与精度
- 2.查准率、查全率与 F 1 F1 F1
- 3.ROC与AUC
- 4.代价敏感错误率与代价曲线
- 四、比较检验
-
- 1.假设检验
- 2.交叉验证t检验
- 3.McNemar检验
- 4.Friedman检验与Nemenyi后验检验
- 五、偏差与方差
- 总结
前言
`第一章主要是阅读性为主,通过西瓜案例引入机器学习概念,本章开始介绍机器学习模型评估内容
一、经验误差与拟合
- “错误率”(error rate) 分类错误的样本数占样本总数的比例 m个样本中有a个错误样本,则错误率 E = a m E=\frac{a}{m} E=ma
- “精度”(accuracy) 1 − a m 1-\frac{a}{m} 1−ma “精度=1-错误率”
- “误差”(error) 实际预测输出与真实样本输出直接的差异
- “训练误差”(training error) “经验误差”(empirical error) 学习器在训练集上的误差
- “泛化误差”(generalization error) 在新样本上的误差,实际上就是要得到一个泛化误差尽量小的学习器
- “过拟合”(overfitting) 在训练样本上学得太好了,学到了一些训练样本的规律,而没有学到“一般规律”
- “欠拟合”(underfitting) 训练样本的性质还没有习得
欠拟合比较容易克服,而过拟合相对麻烦。机器学习通常面对的是NP难甚至更难,若果能在多项式时间内运行完成的是有效机器学习算法。
- 时间复杂度 o ( 1 ) < o ( n ) < o ( n l g n ) < o ( n 2 ) < o ( n a ) < o ( e n ) < o ( n ! ) o(1)o(1)<o(n)<o(nlgn)<o(n2)<o(na)<o(en)<o(n!)
- 多项式时间[ o ( 1 ) < o ( n ) < o ( n l g n ) < o ( n 2 ) < o ( n a ) o(1)o(1)<o(n)<o(nlgn)<o(n2)<o(na)]内问题
- P类问题(Polynominal)存在多项式时间算法问题
- NP类问题(Nondeterministic Polynominal-hard problem)能在多项式时间内验证得出一个正确的解。个人理解:可以靠猜得到一个解,但不一定在多项式时间内总是可以猜对
- NP难问题(NP-hard)无法得到多项式级的算法
二、评估方法
- 测试集(testing set) 来测试机器学习对于新样本的判别能力,测试集与训练集互斥,避免影响测试结果(过于“乐观”)
- “测试误差(testing error) 作为泛化误差的近似
1.留出法
直接将训练集D划分为互斥的集合, D = S ∪ T , S ∩ T = ∅ D=S\cup T, S\cap T = \emptyset D=S∪T,S∩T=∅
30%的测试样本+70%训练样本,在测试样本中有30%的样本被错误分类,则精度为1-30%
避免因为数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别相似
单次使用留出法得到的估计结果往往不太稳定可靠,一般采用多次划分,结果取平均值
常见做法是大约2/3~4/5的样本用于训练,剩余样本用于测试
2.交叉验证法
“交叉验证法”(cross validation) 将数据集D划分为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中通过分层采样得到。每次k-1个子集作为训练集,余下的作为测试集,最终返回k次训练的均值。
- “k折交叉验证”(k-fold cross validation),最常用的是10折交叉验证(5,20)
为减小因样本划分不同而引入的差别,k折交叉验证通常随机使用不同的划分重复p次,最终返回p次k折交叉验证的均值,常用”10次10折交叉验证“
- 留一法(“Leave-One-Out,LOO)有m个样本,k=m,但是当数据集比较大时,不太适用留一法,数据量100万
3.自主法
k折方法,训练集比D小,会引起一些因为训练样本规模不同而导致的估计误差
- “自助法”(bootsrapping)直接采用自助采样(bootstrap sampling)为基础。在数据集D中重复有放回的采样m次,采样得到D’。样本始终不会被采集到的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1)m,
lim n → ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 \lim_{n \to \infty}(1-\frac{1}{m})^m \mapsto \frac{1}{e} \approx 0.368 n→∞lim(1−m1)m↦e1≈0.368
即采用自助,初始数据集D中约有36.8%的样本未出现在采样数据集D‘中,于是把D’作为训练集,D\D’用作测试集,我们仍有数据总量的1/3的、没在训练集中出现的样本用于测试,这种测试结果也叫 “包外估计”(out-of-bag estimate)
缺点:自助法产生的数据集改变了初始数据集的分布,这会引起估计偏差,在数据量足够时,留出法和交叉验证法更常用
4.调参与最终模型
-
调参(parameter tuning)对算法的参数进行设定
-
很多参数都是属于实数域的,所以无法尝试所有参数,通常选择范围步长,例 [ 0 , 0.2 ] [0,0.2] [0,0.2]范围内以0.05为步长,实际选择要评估的候选参数有5个
-
在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型,这个模型在训练过程中使用了所有m个样本,这才是我们最终提交给用户的模型
-
训练数据划分为训练集和验证集(validation set) 基于验证集上的性能来进行模型参数选择和调参
三、性能度量
- 性能度量(performance measure) 衡量模型泛化能力的评价标准,模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求
回归任务最常用的性能度量是**“均方误差”(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 D D和概率密度函数 p ( ⋅ ) p(\cdot) p(⋅),均方误差为
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D) = \int_{x\sim D}(f(x)-y)^2p(x)dx E(f;D)=∫x∼D(f(x)−y)2p(x)dx
1.错误率与精度
对样例集D,分类错误率定义为
E ( f ; D ) = 1 m ∑ i = 1 m Π ( f ( x i ) ≠ y i ) E(f;D) = \frac{1}{m}\sum_{i=1}^m\Pi(f(x_i)\ne y_i) E(f;D)=m1i=1∑mΠ(f(xi)=yi)
Π ( ⋅ ) \Pi(\cdot) Π(⋅)计数符号,精度定义为
a c c ( f ; D ) = 1 m ∑ i = 1 m Π ( f ( x i ) = y i ) = 1 − E ( f ; D ) \begin{aligned} acc(f;D) &= \frac{1}{m}\sum_{i=1}^m\Pi(f(x_i)=y_i) \\ & = 1-E(f;D) \end{aligned} acc(f;D)=m1i=1∑mΠ(f(xi)=yi)=1−E(f;D)
对于连续分布 D D D和概率密度函数 p ( ⋅ ) p(\cdot) p(⋅):
E ( f ; D ) = ∫ x ∼ D Π ( f ( x ) ≠ y ) p ( x ) d x a c c ( f ; D ) = ∫ x ∼ D Π ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) E(f;D) = \int_{x\sim D} \Pi (f(x) \ne y)p(x)dx\\ \begin{aligned} acc(f;D) &= \int_{x\sim D} \Pi(f(x) = y)p(x)dx \\ &= 1 - E(f;D) \end{aligned} E(f;D)=∫x∼DΠ(f(x)=y)p(x)dxacc(f;D)=∫x∼DΠ(f(x)=y)p(x)dx=1−E(f;D)
2.查准率、查全率与 F 1 F1 F1
- 真正率(true positive)
- 假正例(false positive)
- 真反例(true negative)
- 假反例(false negative)
预测结果与真实情况对比,相同为T(true),不同为F(false),比对结果+预测结果
TP + FP +TN +FN = 样例总数
- 查准率P(precision) P = T P T P + F P P = \frac{TP}{TP+FP} P=TP+FPTP 所有预测的正例中,真实的正例有多少比例,所有预测的好瓜有真的好瓜的比例
- 查全率R(recall) R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP 所有的正例有多少被查出来,好瓜有多少被找出来了。
- “P-R曲线”,查准率和查全率相互矛盾,我们将学习器认为”最有可能“是正例的样本排在前面,”最不可能“的样例排在最后,按照这个顺序逐个把样本作为正例进行预测,计算查全率R作为横轴,查准率P作为纵轴
若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者
- “平衡点”(Break-Event Point 简称BEP) 当俩个学习器P-R曲线交叉时,可以用“查准率=查全率”时的取值BEP进行度量,学习器C的BEP 0.64,学习器A优于学习器B
- F 1 F1 F1度量
F 1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N \begin{aligned} F1 &= \frac{2\times P \times R}{P + R}\\ &=\frac{2 \times TP}{样例总数 + TP - TN} \end{aligned} F1=P+R2×P×R=样例总数+TP−TN2×TP
一般形式
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度量了查全率对查准率的相对重要性, β = 0 \beta = 0 β=0退化为标准 F 1 F1 F1; β > 1 \beta > 1 β>1时查全率影响更大; β < 1 \beta < 1 β<1时查准率影响更大
存在多个训练/测试集,n个二分类混淆矩阵上综合考察查准率和查全率
- “宏查准率”(macro-P) “宏查全率”(macro-R) “宏F1”(macro-F1)
macro-P = 1 n ∑ i = 1 n P i macro-R = 1 n ∑ i = 1 n R i macro-F1 = 2 × macro-P × macro-R macro-P + macro-R \text{macro-P} = \frac{1}{n}\sum_{i=1}^n P_i\\ \text{macro-R} = \frac{1}{n}\sum_{i=1}^n R_i\\ \text{macro-F1} = \frac{2\times \text{macro-P}\times \text{macro-R}}{\text{macro-P}+\text{macro-R}} macro-P=n1i=1∑nPimacro-R=n1i=1∑nRimacro-F1=macro-P+macro-R2×macro-P×macro-R
- “微查准率”(micro-P) “微查全率”(micro-R) “微 F 1 F1 F1”(micro-F1)
micro-P = T P ‾ T P ‾ + F P ‾ micro-R = T P ‾ T P ‾ + F N ‾ micro-F1 = 2 × micro-P × micro-R micro-P + micro-R \text{micro-P}=\frac{\overline {TP}}{\overline{TP}+\overline{FP}}\\ \text{micro-R}=\frac{\overline{TP}}{\overline{TP}+\overline{FN}}\\ \text{micro-F1}=\frac{2\times\text{micro-P}\times\text{micro-R}}{\text{micro-P}+\text{micro-R}} micro-P=TP+FPTPmicro-R=TP+FNTPmicro-F1=micro-P+micro-R2×micro-P×micro-R
3.ROC与AUC
- 很多学习器是为测试样本产生一个实值或概率预测,然后与分类阈值(threshold) 比较,大于阈值则为正类,否则为反类。我们可以将样本排序,分类过程就是以 “截断点”(cut point) 将样本分为两个部门,前一部分为正例,后一部分为反例
- 更重视查准率,选择比较靠前的截断点,比较重视查准率,选择比较靠后的截断点,因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,ROC曲线是从这个角度来研究学习器泛化性能的有力工具
- “受试者工作特征” 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 \begin{aligned} TPR = \frac{TP}{TP+FN}\\ FPR = \frac{FP}{TN+FP} \end{aligned} TPR=TP+FNTPFPR=TN+FPFP
从真实情况出发,真正例和假正例所占比例
将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例
与PR曲线类似,若一个学习器的ROC曲线被另一个ROC曲线完全“包住”,则可断言后者的性能优于前者;若两个曲线交叉,如果一定要比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + y i + 1 ) AUC = \frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1} - x_i)(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 − ( Π ( f ( x + ) < f ( x − ) ) + 1 2 Π ( f ( x + ) = f ( x − ) ) ) \ell_{rank} = \frac{1}{m^+m^-}\sum_{x^+\in D^+}\sum_{x^-\in D^-}(\Pi(f(x^+)ℓrank=m+m−1x+∈D+∑x−∈D−∑(Π(f(x+)<f(x−))+21Π(f(x+)=f(x−)))
即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”
ℓ r a n k \ell_{rank} ℓrank对应的是ROC曲线上的面积, A U C = 1 − ℓ r a n k AUC=1-\ell_{rank} AUC=1−ℓrank
4.代价敏感错误率与代价曲线
- “非均等代价”(unequal cost) 医生将正常人判定为患者的代价(多几项检查)要远小于将患者判定为正常的代价(耽误治疗)。
c o s t 01 cost_{01} cost01第0类被错误的判定为第一类
- “总体代价”(total cost) 第0类作为正类,第1类作为反类,令 D + D^+ D+和 D − D^- D−分别代表样例集 D D D的正例子集和反例子集,则 “敏感代价”(cost-sensitive) 错误率为
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + Π ( f ( x i ≠ y i ) × c o s t 01 + ∑ x i ∈ D − Π ( f ( x i ≠ y i ) × c o s t 10 ) E(f;D;cost)=\frac{1}{m}(\sum_{x_i\in D^+}\Pi(f(x_i\ne y_i)\times cost_{01}+\sum_{x_i\in D^-}\Pi(f(x_i\ne y_i)\times cost_{10}) E(f;D;cost)=m1(xi∈D+∑Π(f(xi=yi)×cost01+xi∈D−∑Π(f(xi=yi)×cost10)
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而 “代价曲线”(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是样例为正例的概率;纵轴是取值为[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)×cost10FNR×p×cost01+FPR×(1−p)×cost10
算代价要从假例出发,FPR假正例率,FNR=1-TPR是假反例率。
四、比较检验
我们希望比较的是泛化性能,然而试验评估的是测试集上的性能,两者未必相同。测试集上的性能与测试集本身的选择有很大关系,使用不同大小的测试集会得到不同的结果,即使大小相同,测试样例不同,结果也会不同。很多机器学习算法本身就有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同
- 统计假设检验(hypothesis test) 若测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把我有多大
1.假设检验
- 假设检验中的“假设”是对学习器泛化错误率分布的某种判断
- 泛化错误率为 ϵ \epsilon ϵ的学习器被测得错误率为 ϵ ^ \hat{\epsilon} ϵ^的概率:
P ( ϵ ^ ; ϵ ) = ( m ϵ ^ × m ) ϵ ϵ ^ × m ( 1 − ϵ ) m − ϵ ^ × m P(\hat{\epsilon};\epsilon)=\dbinom{m}{\hat{\epsilon}\times m}\epsilon^{\hat{\epsilon}\times m}(1-\epsilon)^{m-\hat{\epsilon}\times m} P(ϵ^;ϵ)=(ϵ^×mm)ϵϵ^×m(1−ϵ)m−ϵ^×m
m个测试样本,m个样例中恰有 ϵ ^ × m \hat{\epsilon}\times m ϵ^×m 样例被分配错误。
解 ∂ P ( ϵ ^ ; ϵ ) / ∂ ϵ \partial{ P(\hat{\epsilon};\epsilon)}/\partial{\epsilon} ∂P(ϵ^;ϵ)/∂ϵ=0可知, P ( ϵ ^ ; ϵ ) P(\hat{\epsilon};\epsilon) P(ϵ^;ϵ)在 ϵ = ϵ ^ \epsilon = \hat{\epsilon} ϵ=ϵ^时最大, ∣ ϵ = ϵ ^ ∣ \left| \epsilon = \hat{\epsilon} \right| ∣ϵ=ϵ^∣增大时 P ( ϵ ^ ; ϵ ) P(\hat{\epsilon};\epsilon) P(ϵ^;ϵ)减小
当 ϵ = 0.3 \epsilon = 0.3 ϵ=0.3,则10个样本中测得3个被误分类的概率最大
可使用“二项检验”(binomial test)来对“ ϵ ≤ 0.3 \epsilon \leq 0.3 ϵ≤0.3”(即泛化错误率是否大于0.3)这样的假设进行检验
多次留出法估计,这时候可以使用“t检验”(t-test),平均测试错误率 μ \mu μ和方差 σ 2 \sigma^2 σ2
μ = 1 k ∑ i = 1 k ϵ ^ i σ 2 = 1 k − 1 ∑ i = 1 k ( ϵ ^ i − μ ) 2 \mu=\frac{1}{k} \sum_{i=1}^k \hat{\epsilon}_i\\ \sigma^2=\frac{1}{k-1}\sum_{i=1}^k(\hat{\epsilon}_i-\mu)^2 μ=k1i=1∑kϵ^iσ2=k−11i=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的t分布
待补充假设检验知识
2.交叉验证t检验
对两个学习器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,, ϵ i A \epsilon_i^A ϵiA和 ϵ i B \epsilon_i^B ϵiB是相同的第i折训练/试验集上得到的结果,则可用k交叉验证 “成对t检验”(paired t-tests) 来进行检验。
每对结果求差 Δ i = ϵ i A − ϵ i B \Delta_i = \epsilon_i^A - \epsilon_i^B Δi=ϵiA−ϵiB,再求差值 Δ 1 , Δ 2 , . . . , Δ k \Delta_1,\Delta_2,...,\Delta_k Δ1,Δ2,...,Δk的均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,变量
τ 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,则假设不能被拒绝,即认为两个学习器的性能没有显著差别。
交叉检验并不独立,会导致过高估计假设成立概率,为缓解这个问题,可采用 “ 5 × 2 5\times2 5×2交叉验证法”,仅计算第一次2折交叉验证的两个结果的平均值 μ = 0.5 ( Δ 1 1 + Δ 1 2 ) \mu=0.5(\Delta_1^1+\Delta_1^2) μ=0.5(Δ11+Δ12),但对每次2折实验结果都计算其方差 σ i 2 = ( Δ i 1 − Δ i 1 + Δ i 2 2 ) 2 + ( Δ i 2 − Δ i 1 + Δ i 2 2 ) 2 \sigma_i^2=(\Delta_i^1-\frac{\Delta_i^1+\Delta_i^2}{2})^2+(\Delta_i^2-\frac{\Delta_i^1+\Delta_i^2}{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_{i=1}^5\sigma_i^2}} τt=0.2∑i=15σi2 μ
服从自由度为5的t分布,其双边检验的临界值 t α / 2 , 5 t_{\alpha/2,5} tα/2,5
3.McNemar检验
- “列联表”(contingency table)
若我们做的假设是两个学习器性能相同,则应有 e 01 = e 10 e_{01}=e_{10} e01=e10,那么变量 ∣ e 01 − e 10 ∣ \left|e_{01}-e_{10} \right| ∣e01−e10∣ 应当服从正态分布,且均值为1,方差为 e 01 + e 10 e_{01}+e_{10} e01+e10,因此变量
τ χ 2 = ( ∣ e 01 − e 10 ∣ − 1 ) 2 e 01 + e 10 \tau_{\chi^2}=\frac{(\left|e_{01}-e_{10} \right|-1)^2}{e_{01}+e_{10}} τχ2=e01+e10(∣e01−e10∣−1)2
服从自由度为1的 χ 2 \chi^2 χ2分布
4.Friedman检验与Nemenyi后验检验
交叉验证t检验和McNemar检验都是在一个数据集上比较两个算法的性能。
假设我们用 D 1 , D 2 , D 3 , D 4 D_1,D_2,D_3,D_4 D1,D2,D3,D4四个数据集对算法A、B、C、D进行比较。首先使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据算法测试性能的由好到坏排序,并赋予序值1,2,…;然后得到平均序值
N个数据集上比较k个算法,令 r i r_i ri表示第i个算法的平均序值, r i r_i ri服从正态分布,其均值和方差分别为 ( k + 1 ) / 2 (k+1)/2 (k+1)/2和 ( k 2 − 1 ) / 12 (k^2-1)/12 (k2−1)/12,变量
τ χ 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 ) \begin{aligned} \tau_{\chi^2} &=\frac{k-1}{k}\cdot \frac{12N}{k^2-1}\sum_{i=1}^k(r_i - \frac{k+1}{2})^2\\ &=\frac{12N}{k(k+1)}(\sum_{i=1}^k r_i^2 - \frac{k(k+1)^2}{4}) \end{aligned} τχ2=kk−1⋅k2−112Ni=1∑k(ri−2k+1)2=k(k+1)12N(i=1∑kri2−4k(k+1)2)
k和N都较大时,服从自由度k-1的 χ 2 \chi^2 χ2分布
上述“原始Friedman”检验过于保守,现在通常使用变量
τ F = ( N − 1 ) τ χ 2 N ( k − 1 ) − τ χ 2 \tau_F = \frac{(N-1)\tau_{\chi^2}}{N(k-1)-\tau_{\chi^2}} τF=N(k−1)−τχ2(N−1)τχ2
τ F \tau_F τF服从自由度为k-1和(k-1)(N-1)的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)
若两个算法的平均序值之差超过了临界值域CD,则以相应的置信度拒绝“两个算法性能相同”这一假设
纵轴是算法,圆点表示各个算法的平均序值,标出临界值域,两个算法有交叠,则说明两个算法没有显著差别
五、偏差与方差
- “偏差-方差分解”(bias-variance decomposition) 是解释学习算法泛化性能的一种重要工具,试图对学习算法的期望泛化错误率进行拆解
以回归任务为例,学习算法 f ( x ; D ) f(x;D) f(x;D)的期望预测为
f ‾ ( x ) = E D [ f ( x ; D ) ] \overline f(x)=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) = 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 = E_D[(y_D-y)^2] ϵ2=ED[(yD−y)2]
期望输出与真实标记的差别成为偏差(bias),即
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 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 ] \begin{aligned} E(f;D) &=E_D[(f(x;D)-y_D)^2]\\ &=E_D[(f(x;D)-\overline f(x)+\overline f(x)-y_D)^2] \end{aligned} E(f;D)=ED[(f(x;D)−yD)2]=ED[(f(x;D)−f(x)+f(x)−yD)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
也就是说,泛化误差可分解为偏差、方差与噪声之和
- 偏差,度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
- 方差,度量了同样大小的训练集变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
- 噪声,则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度
- 泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的
- 偏差与方差是有冲突的,称为 偏差-方差窘境(bias-variance dilemma)
平衡偏差与方差,训练程度过高,会发生过拟合(泛化误差增大)
总结
本章主要难点在于假设检验,涉及到一些随机数学的知识,后续单独起一章总结假设检验。本章的内容总结不够精炼