模型评估与选择
学习方法的泛化能力,就是描述一个模型对未知事物的预测能力,然而如何确定一个模型的泛化能力,这就需要通过相应的评估。不同模型对不同数据的泛化能力不同,选择什么样的模型,意味着选择什么样的学习效果。
一、误差与过拟合
机器学习的目的是使得模型不仅对已知数据且对未知数据都能有很好的预测能力。在实际过程中,预测错误是在所难免的,相应的,把机器学习实际预测与样本输出的真实输出之间的差异称之为误差,模型在训练集上的误差称为训练误差或经验误差,在测试集上叫测试误差。
而基于损失函数的模型的训练误差和测试误差自然就成为学习方法评估的标准。
假设学习到的模型是Y=f^(X)Y=\hat{f} \left(X\right)Y=f^(X),训练误差是模型Y=f^(X)Y=\hat{f} \left(X\right)Y=f^(X)关于训练集的平均损失函数:
Rempf^(X)=1N∑i=1NL(yi,f^(xi))R_{emp}\hat{f}\left(X\right)=\frac{1}{N}\sum_{i=1}^NL\left(y_{i,}\hat{f}\left(x_i\right)\right)Rempf^(X)=N1i=1∑NL(yi,f^(xi))
其中N是训练样本容量。
测试误差是模型Y=f^(X)Y=\hat{f} \left(X\right)Y=f^(X)关于测试数据集的平均损失:
KaTeX parse error: Double superscript at position 55: …N'}\sum_{i=1}^N'̲L\left(y_{i,}\h…
其中*N’*是测试样本容量。
如果一味追求提高训练数据的预测能力,所选模型的复杂度则往往会比较高。这种现象称为过拟合。
二、模型的评估方法
1、交叉验证
交叉验证,先将数据集DDD划分为k个大小相似的互斥单元,即D=D1∪D2∪...∪Dn,Di∩Dj=∅(i≠j)D = D_1\cup D_2\cup ...\cup D_n, D_i\cap D_j =\varnothing (i \neq j)D=D1∪D2∪...∪Dn,Di∩Dj=∅(i=j),每个子集DiD_iDi都尽可能的保持数据分布的一致性,即从DDD中通过分层采样得到。然后每次用k−1k-1k−1个子集的并作为训练集,余下的子集作为测试集(留一法);这样就可以获得kkk组训练集/测试集,从而可以进行kkk次训练和测试,最终返回的是kkk个测试结果的均值。显然交叉验证评估结果的稳定性和保真性在很大程度上取决于kkk的取值,因此通常把交叉验证称为kkk折交叉验证。
2、Bootstrapping算法
中文翻译为自助法,交叉验证中留一法受训练样本规模变化的影响小,但计算复杂度太高了。自助法正好解决了留一法中计算复杂度高的问题,同时还能减少训练样本规模不同造成的影响。
自助法直接以自主采样作为基础。给定冒汗mmm个样本的数据集DDD,对它进行采样产生的数据集D′D'D′:每次随机从DDD中挑选一个样本,将其拷贝放入D′D'D′,然后再将该样本放回初始数据集DDD中,是的该样本在下次采样是任有可能被采到;这个过程重复执行mmm次之后,我们就得到了包含mmm个样本的数据集D′D'D′,这就是自主采样的结果。样本在mmm次采样中始终不被采到的概率是(1−1m)m(1 - \frac{1}{m})^m(1−m1)m,取极限可得limm→∞(1−1m)m→1e≈0.368\lim_{m \to \infty }(1 - \frac{1}{m})^m \rightarrow \frac{1}{e}\approx 0.368m→∞lim(1−m1)m→e1≈0.368
即通过自主采样,初始数据集DDD中约有38%38\%38%的样本未出现在采样数据集D′D'D′中,于是我们可以讲D′D'D′用作训练集,D−D′D-D'D−D′用作测试集。
三、泛化能力
错误率是分类错误的样本数量占样本总数量的比例,精度则是分类正确的样本占样本总数的比例,对样本DDD,分类错误率定义为:E(f;D)=1m∑i=1m(f(xi)≠yi)E(f;D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)\neq y_i)E(f;D)=m1i=1∑m(f(xi)=yi)
分类精度定义为:acc(f;D)=1m∑i=1m(f(xi)=yi)=1−E(f;D)acc(f;D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)= y_i)=1-E(f;D)acc(f;D)=m1i=1∑m(f(xi)=yi)=1−E(f;D)
更一般的,对于数据分布DDD和概率密度函数p(.)p(.)p(.),错误率与精度分别可表示为:
E(f;D)=1m∫x∼D(f(x)≠y)p(x)dxE(f;D)=\frac{1}{m}\int_{x\sim D}(f(x)\neq y)p(x)dxE(f;D)=m1∫x∼D(f(x)=y)p(x)dx
acc(f;D)=∫x∼D(f(x)=y)p(x)dx=1−E(f;D)acc(f;D)=\int_{x\sim D}(f(x)= y)p(x)dx = 1-E(f;D)acc(f;D)=∫x∼D(f(x)=y)p(x)dx=1−E(f;D)
2、查全率与在查准率
对于二分类问题,可将样例根据真实类别与学习器预测类别的组合划分为真正例(TPTPTP)、假正例(FPFPFP)、真反例(TNTNTN)、假反例(FNFNFN)四种情形。显然有TP+FP+TN+FN=TP+FP+TN+FN=TP+FP+TN+FN=样例总数。分类结果的混淆矩阵如表所示:
查全率PPP和查准率RRR分别定义为:
P=TPTP+FPP=\frac{TP}{TP+FP}P=TP+FPTP
R=TPTP+FNR=\frac{TP}{TP+FN}R=TP+FNTP
查全率与查准率是一对矛盾量,如图所示:
图片来自《机器学习》周志华著
由图可知,依据平衡点(BEP)度量,学习器A优于学习器B。然而用平衡点还是过于简化,更常用的是F1F1F1度量:
F1=2×P×RP+R=2×TPall+TP−TNF1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{all+TP-TN}F1=P+R2×P×R=all+TP−TN2×TP
allallall是样例总量
更有F1F1F1的一般形式:
Fβ=(1+β2)×P×R(β2×P)+RF_\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时退化为标准F1F1F1,β>1\beta > 1β>1时查全率有更大影响,β<1\beta < 1β<1时查准率有更大影响。
如何在二分类混淆矩阵上综合考察查准率和查全率,一种直接的方法是分别计算查全率和查准率记为(P1,R1),(P2,R2),...,(Pn,Rn)(P_1,R_1),(P_2,R_2),...,(P_n,R_n)(P1,R1),(P2,R2),...,(Pn,Rn),再计算平均值,这样就得到macro−P、macro−R,macro-P、macro-R,macro−P、macro−R,以及macro−F1macro-F1macro−F1:
macro−P=1n∑i=1nPimacro-P=\frac{1}{n}\sum_{i=1}^{n}P_imacro−P=n1i=1∑nPi
macro−R=1n∑i=1nRimacro-R=\frac{1}{n}\sum_{i=1}^{n}R_imacro−R=n1i=1∑nRi
macro−F1=2×macro−P×macro−Rmacro−P+macro−Rmacro-F1=\frac{2\times macro-P\times macro-R}{macro-P+macro-R}macro−F1=macro−P+macro−R2×macro−P×macro−R
还可先将个混淆矩阵的对应元素进行平均,得到TP‾、FP‾、TP‾、FN‾\overline{TP}、\overline{FP}、\overline{TP}、\overline{FN}TP、FP、TP、FN,再基于平均值算出micro−P,micro−Rmicro-P,micro-Rmicro−P,micro−R和micro−F1micro-F1micro−F1:
micro−P=TP‾TP‾+FP‾micro-P=\frac{\overline{TP}}{\overline{TP}+\overline{FP}}micro−P=TP+FPTP
micro−R=TP‾TP‾+FN‾micro-R=\frac{\overline{TP}}{\overline{TP}+\overline{FN}}micro−R=TP+FNTP
micro−F1=2×micro−P×micro−Rmicro−P+microRmicro-F1=\frac{2\times micro-P\times micro-R}{micro-P+microR}micro−F1=micro−P+microR2×micro−P×micro−R
###3、ROC与AUC
ROC全称是“受试者工作特征”(Receriver Operating Characteristic)曲线,目前是用来描述机器学习期望泛化能力。横轴是“假正率”(FPRFPRFPR),纵轴是“真正率”(TPRTPRTPR),两者分别定义为:
FPR=FPTN+FPFPR=\frac{FP}{TN+FP}FPR=TN+FPFP
TPR=TPTP+FNTPR=\frac{TP}{TP+FN}TPR=TP+FNTP
若一个学习器ROC曲线被另一个学习器的曲线完全包住,则可断定,后者性能优于前者。较为合理的判据是比较ROC曲线下的面积,即AUC(“Area Under ROC Curve”)
图片来自《机器学习》周志华著
假定ROC曲线是由坐标为(x1,y1),(x2,y2),...,(xm,ym){(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}(x1,y1),(x2,y2),...,(xm,ym)的点按序连接而形成(x1=0,xm=1)(x_1=0,x_m=1)(x1=0,xm=1),则AUC可估计为:
AUC=12∑i=1m−1(xi+1−xi)⋅(yi+yi+1)AUC=\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−分别表示正、反例的集合。则排序损失定义为:
lrank=1m++m−∑x+∈D+∑x−∈D−((f(x+)<f(x−))+12(f(x+)=f(x−)))l_{rank}=\frac{1}{m^{+}+m^{-}}\sum_{x^{+}\in D^{+}}\sum_{x^{-}\in D^{-}}((f(x^{+})<f(x^{-}))+\frac{1}{2}(f(x^{+})=f(x^{-})))lrank=m++m−1x+∈D+∑x−∈D−∑((f(x+)<f(x−))+21(f(x+)=f(x−)))
即考虑每一个正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,记0.5个“罚分”。容易看出lrankl_{rank}lrank对应的是ROC曲线之上的面积,则:
AUC=1−lrankAUC=1-l_{rank}AUC=1−lrank
4、偏差与方差
偏差-方差分解是用来描述为什么具有泛化能力的一种工具。偏差-方差分解试图对学习算法的期望反话错误率进行拆解。对测试样本xxx,令yDy_DyD为xxx在数据集中的标记,yyy为xxx的真实标记,f(x;D)f(x;D)f(x;D)为训练集DDD上学得模型fff在xxx上的预测输出,以回归任务为例,学习算法的期望预测为:
f‾(x)=ED[f(x;D)]\overline{f}(x)=\mathbb{E}_D[f(x;D)]f(x)=ED[f(x;D)]
使用样本相同的不同训练集产生的方差为:
var(x)=ED[(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=ED[(yD−y)2]\varepsilon^2=\mathbb{E}_D[(y_D-y)^2]ε2=ED[(yD−y)2]
期望输出与真实标记的差别称为偏差(bias),即
bias2(x)=(f‾(x)−y)2bias^2(x)=(\overline{f}(x)-y)^2bias2(x)=(f(x)−y)2
则,对算法的期望泛化误差进行分解可得:
E(f;D)=ED[(f(x;D)−f‾(x))2]+(f‾(x)−y)2+ED[(yD−y)2]E(f;D)=\mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]+(\overline{f}(x)-y)^2+\mathbb{E}_D[(y_D-y)^2]E(f;D)=ED[(f(x;D)−f(x))2]+(f(x)−y)2+ED[(yD−y)2]
于是:
E(f;D)=bias2(x)+var(x)+ε2E(f;D)=bias^2(x)+var(x)+\varepsilon^2E(f;D)=bias2(x)+var(x)+ε2
也就是说,泛化误差可以分解为偏差、方差与噪声之和。
偏差:刻画了算法本身的拟合能力。
方差:刻画了数据扰动造成的影响。
噪声:刻画了学习问题本身的难度。
一般来说,偏差与方差是有冲突的,如图:
图片来自《机器学习》周志华著
四、模型的选择
1、假设检验
假设检验是中的“假设”是对学习器泛化错误率分布的某种判断或猜想。学习器实际错误率和测试错误率之间有差异,但是我们可以从测试错误率推出实际错误率。
泛化错误率为ε\varepsilonε的学习器在一个样本上犯错误的概率是ε\varepsilonε测试错误率ε^\hat{\varepsilon}ε^意味着在mmm个样本中有ε^×m\hat{\varepsilon}\times mε^×m个被分错。假设测试样本是从总体样本分布中独立而来,那么泛化错误率为ε\varepsilonε的学习器将其中m′m'm′个样本误分类,其中被分类正确的概率为εm′(1−ε)m−m′\varepsilon^{m'}(1-\varepsilon)^{m-m'}εm′(1−ε)m−m′,由此可估算出将ε^×m\hat{\varepsilon}\times mε^×m个样本分类错误的概率为(泛化错误率为ε\varepsilonε的学习器被测试得测试错误率为ε^\hat{\varepsilon}ε^的概率):
P(ε^;ε)=(mε^×m)εε^×m(1−ε)m−ε^×mP(\hat{\varepsilon};\varepsilon)=\binom{m}{\hat{\varepsilon}\times m}\varepsilon^{\hat{\varepsilon}\times m}(1-\varepsilon)^{m-\hat{\varepsilon}\times m}P(ε^;ε)=(ε^×mm)εε^×m(1−ε)m−ε^×m
给定测试错误率 则解∂P(ε^;ε)∂ε=0\frac{\partial P(\hat{\varepsilon};\varepsilon)}{\partial \varepsilon}=0∂ε∂P(ε^;ε)=0可知,P(ε^;ε)P(\hat{\varepsilon};\varepsilon)P(ε^;ε)在ε^=ε\hat{\varepsilon}=\varepsilonε^=ε时最大,∣ε−ε^∣|\varepsilon-\hat{\varepsilon}|∣ε−ε^∣增大时P(ε^;ε)P(\hat{\varepsilon};\varepsilon)P(ε^;ε)减小。这符合二项分布。若ε=0.3\varepsilon=0.3ε=0.3则10个样本分类错误为3个的概率最大:
图片来自《机器学习》周志华著
这里的1−α1-\alpha1−α反映了结论的置信度。而,在1−α1-\alpha1−α的概率内所能观察到的最大错误概率如下公式:
ε‾=maxε\overline{\varepsilon}=max\varepsilonε=maxε
s.t.s.t.s.t.
∑i=ε0×m+1m(mi)εi(1−ε)m−i<α\sum_{i=\varepsilon_0\times m+1}^{m}\binom{m}{i}\varepsilon^{i}(1-\varepsilon)^{m-i}<\alphai=ε0×m+1∑m(im)εi(1−ε)m−i<α
2、T检验
在很多时候并非做一次留出估计发,而是重复留出法或者交叉检验法进行多次训练/测试,这样会得到多个测试错误率,此时可以用t检验。假定我们得到了kkk个测试错误率,ε^1,ε^2,...,ε^k\hat{\varepsilon}_1,\hat{\varepsilon}_2,...,\hat{\varepsilon}_kε^1,ε^2,...,ε^k,则平均测试错误率μ\muμ和方差σ2\sigma^2σ2为:
μ=1k∑i=1kε^i\mu=\frac{1}{k}\sum_{i=1}^{k}\hat{\varepsilon}_iμ=k1i=1∑kε^i
σ2=1k−1∑i=1k(ε^i−μ)2\sigma^2=\frac{1}{k-1}\sum_{i=1}{k}(\hat{\varepsilon}_i-\mu)^2σ2=k−11i=1∑k(ε^i−μ)2
考虑这kkk个测试错误率可看作泛化错误率ε0\varepsilon_0ε0的独立采样,则变量
τt=k(μ−ε0)σ\tau_t=\frac{\sqrt{k}(\mu-\varepsilon_0)}{\sigma}τt=σk(μ−ε0)
对于多个学习器之间的性能比较可用交叉T检验、McNemar检验、Friedman检验与Nemenyi后续检验。