机器学习之:模型评估和选择

经验误差和过拟合

  1. 模型在训练集上的误差称为:“训练误差”,也叫经验误差。在新样本上的误差称为:“泛化误差”。显然,我们想要得到一个泛化误差较小的模型。然而,在实际情况中,我们往往不能事先知道新样本是什么样,因此我们能做的就是努力减小经验误差。
  2. 过拟合:把训练样本自身的一些特性当作所有潜在样本的共性,这样会导致模型泛化性能下降(个性当共性)。过拟合是无法彻底避免的,我们能做只是缓解,或者减小其风险。
    过拟合的一般解决方案:
    2.1 更多的训练数据, 模型强弱是相对的,既然模型学习能力太强,我们就给出更多的训练数据供模型去学习,给予模型更多需要学习的情况。从这个角度出发,有以下几种具体的方法:
    从数据来源处获取:这种方法是效果最好的,但一般也是比较难实现的。
    数据增强:在原有数据的基础上,使用数据增强技术,比如对图片进行翻转,平移、缩放加入噪声、光照改变等。具体要根据任务而定。
    2.2 更合适的模型:因为模型相对于任务和数据来说学习能力太强了。我们需要采取措施来降低模型的学习能力或者约束模型的学习能力。
    更简单的模型:对NN来说,就是使用较浅的网络来替换当前网络。对于决策树来说,就是使用剪枝来降低决策树的学习能力。
    更短的训练时间:虽然模型学习能力强,但是也需要时间来学习拟合特征,我们可以使用早停训练方法,将训练集分为训练集和验证集,当验证集误差提升时,就停止继续训练,防止模型进一步过拟合。
    正则化:将网络参数加入到loss中,防止网络参数过大,一定程度上约束了网络的学习能力。
    2.3 给网络加入噪声:给网络中加入一定噪声,影响网络学习。
    在输入加入噪声,通过前向传播到loss中,会引入一个类似于L2正则项的loss,达到和正则化一样的目的。
    在网络响应中加入噪声,网络前向推导过程综合,将模型神经元的输出改为随机值,是不是和dropout有点类似。还有比如label smoothing,给与负点一定的奖励,防止one-hot label的过硬约束。这样一算,其实Hinton的知识蒸馏,软标签也是这个思路,单独学习logits太过强硬,并不是最好的。学习soft logits 可以才是更好的。
    2.4 Dropout:在集成学习中,我们知道,可以通过多个弱学习器,构建一个泛化性能更加强的强学习器。而,dropout就类似集成学习的思想,既然网络太强了,我们就尝试把网络变弱(以概率p让一些神经元失活),这样,多次训练,我们就可以近似是训练了多个不同的弱网络。在实际测试使用费时,再以一定概率加权集成。可以达到比原谅完整网络更强的泛化性能。
    2.5 迁移学习:还有说迁移学习也是一种解决过拟合的办法,前提如果数据太过简单,我们可以尝试使用一个在类似任务上训练好的模型,固定一部分参数层,单独训练很少的层。这看起来也是约束模型的学习能力。
  3. 欠拟合:尚未完全学习到所有样本的共性。一般欠拟合容易克服,我们可以增加训练次数,决策树增加分支等。

测试集生成

我们选择一个理想的模型是泛化误差较小的模型,但是又无法直接获得泛化误差,此时就需要一个测试集来测试模型的泛化能力,作为泛化误差的近似。测试集的选择应当与训练集互斥,即:测试样本尽量不要出现在训练集中,未在训练集中使用。

  1. 留出法:直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即: D = S ∪ T , S ∩ T = ∅ D=S \cup T, S \cap T=\varnothing D=ST,ST=
    采用此种方法划分时,尽量保持训练/测试集分布一致。使用留出法,一般采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。
  2. 交叉验证法:事先将数据集D分成k个大小相近的互斥子集,即 D = D 1 ∪ D 2 ∪ … ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D=D_{1} \cup D_{2} \cup \ldots \cup D_{k}, D_{i} \cap D_{j}=\varnothing(i \neq j) D=D1D2Dk,DiDj=(i=j),每个子集都尽量保持数据分布一致;然后每次选择k-1子集作为训练集,余下的那个作为测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。故k的取值很关键,一般取k=10,称为10折交叉验证。通常为了取不同的划分方法,k折交叉验证的随机划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的10次10折交叉验证。
    还有一个特例,若D含有m个样本,令k=m,那么成为留一法。留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,但是数据集较大时,计算开销大。
  3. 自助法:直接用自助采样的方法,每次从D中随机选择一个样本,将其拷贝放入D’,并将样本放回,使得该样本下次采样时仍可能被采集;这个过程重复m次后,生成D’。显然,有一部分样本会在 D’中重复出现,一部分样本不出现。样本在m次采样中始终不被采样到的概率为 ( 1 − 1 m ) m \left(1-\frac{1}{m}\right)^{m} (1m1)m,取极限得到: lim ⁡ m → ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 \lim _{m \rightarrow \infty}\left(1-\frac{1}{m}\right)^{m} \mapsto \frac{1}{e} \approx 0.368 mlim(1m1)me10.368
    即通过自动采样,初始数据集D中约有36.8%的样本未出现在数据集D’中,于是使用D’作为训练,D\D’作为测试。自助法在数据量较小时,难以有效划分训练/测试集时很有用。

性能度量

在预测任务中,给定样本集合D={ (x1,y1),(x2,y2),…,(xm,ym)},其中yi时样例xi的真实标记,要评估模型的f 的性能,就要把模型f的预测结果f(x)和真实标记yi比较。
回归任务中最常用的性能度量是"均方误差"
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f ; D)=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(\boldsymbol{x}_{i}\right)-y_{i}\right)^{2} E(f;D)=m1i=1m(f(xi)yi)2
更一般的,对于数据分布D和概率密度函数p(),均方误差可描述为:
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}}(f(\boldsymbol{x})-y)^{2} p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} E(f;D)=xD(f(x)y)2p(x)dx
二者中,前者是离散型分布,后者则是连续型分布。

下面介绍分类任务中常用的度量标准。

  • 错误率和精度是最常用的指标,,适用于二分类,也适用于多分类。
    错误率: 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}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) E(f;D)=m1i=1mI(f(xi)=yi)
    精度: acc ⁡ ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) \begin{aligned} \operatorname{acc}(f ; D) &=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right)=y_{i}\right) \\ &=1-E(f ; D) \end{aligned} acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D)
    连续型分布时,错误率和精度分别描述为:
    E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} E(f;D)=xDI(f(x)=y)p(x)dx
    acc ⁡ ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) \begin{aligned} \operatorname{acc}(f ; \mathcal{D}) &=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x})=y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \\ &=1-E(f ; \mathcal{D}) \end{aligned} acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)
  • 查准率,查全率和F1
    对于一个二分类问题,可将样例根据模型预测类别和真实类别的组合划分为:TP(true positive),FP(false positive),TN(true negative), FN(false negative)四种情况,显然TP+FP+TN+FN = 样本总数。

在这里插入图片描述

查准率P(precision)和查全率R(recall)分别定义为:
P = T P T P + F P P=\frac{T P}{T P+F P} P=TP+FPTP
R = T P T P + F N R=\frac{T P}{T P+F N} R=TP+FNTP
查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往低,而查全率高时,查准率往往偏低。例如:希望将好瓜尽可能的选出来(提高查全率),那么可以通过增加选瓜的数量实现,极限情况,跳出所有瓜(认为所有瓜都是好的),那么TP直接拉满,FN(误判为坏瓜的好瓜)为0,此时查全率为100%,而查准率则是真实的好瓜占比;同样地,若希望提高查准率,即跳出的瓜都是好的,则策略变为只选出有充分把握的瓜,例:只选出一个最有把握的好瓜,那么TP为1,FP为0,查准率为100%,查全率则很小,= 1 好 瓜 总 数 \frac{1}{好瓜总数} 1
对于一个模型来说,查准率和查全率并不是完全固定的。什么意思呢?当查全率固定时,此时就可以计算出当前对应的查准率,反之同理。我们可以将模型预测结果进行优劣排序,第一个即最可能是正例的,最后一个最可能为反例。按此顺序把样本预测为正例(第一次认为第一个是正例,其余为反例,第二次认为前两个为正例,其余反例。。。),可依次得到当前的查全率,查准率。以查准率为纵轴,查全率为横轴作图,即可得到P-R曲线。
在这里插入图片描述
此P-R图显示了三个模型的性能,模型B明显优于模型C,因此在任何点,B的查准率和查全率均高于C,即曲线B完全包住曲线C。A和B不能直接比较,可以通过比较曲线下的面积大小比较,一定程度表现了模型在P-R取得相对高的表现。
平衡点:y=x 与三条曲线的交点,即每个曲线上P,R值相同的点。它也是一个衡量查准率,查全率的标准。此时认为A>B>C。
F1:平衡点描述较简单,更常用的是F1,定义如下:
F 1 = 2 × P × R P + R = 2 × T P  样例总数  + T P − T N F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times T P}{\text { 样例总数 }+T P-T N} F1=P+R2×P×R= 样例总数 +TPTN2×TP
F1是基于查准率和查全率的调和平均定义的: 1 F 1 = 1 2 ⋅ ( 1 P + 1 R ) \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) F11=21(P1+R1),与算术平均相比 ( P + R ) 2 \frac{(P+R)}{2} 2(P+R)和几何平均 ( P × R ) (\sqrt{P \times R}) (P×R )相比,调和平均更重视较小值。
在一些应用中,对于查准率和查全率的重视程度不同,例如,推荐系统,希望推荐的内容是精准的,此时要求更高的查准率。F1的更一般性的度量 F β F_{\beta} Fβ,可以让我们定义对P,R的不同偏好,定义为:
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R} Fβ=(β2×P)+R(1+β2)×P×R
其中 β {\beta} β>0,度量了查全率对查准率的相对重要性, β {\beta} β=1退化为标准F1; β {\beta} β>1,查全率有更大影响; β {\beta} β<1,查准率有更大影响。

当我们进行多次训练/测试时(或者在多个数据集上),就产生了多个二分类混淆矩阵,此时希望评估算法全局的性能,在n个二分类混淆矩阵上评价P,R。

  • 做法1:先计算每个矩阵的P,R,再做平均。得到宏查准率(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 ⁡ − F 1 = 2 × macro ⁡ − P × macro ⁡ − R macro ⁡ − P + macro ⁡ − R \begin{aligned} &\operatorname{macro}-P=\frac{1}{n} \sum_{i=1}^{n} P_{i}\\ &\operatorname{macro}-R=\frac{1}{n} \sum_{i=1}^{n} R_{i}\\ &\operatorname{macro}-F 1=\frac{2 \times \operatorname{macro}-P \times \operatorname{macro}-R}{\operatorname{macro}-P+\operatorname{macro}-R} \end{aligned} macroP=n1i=1nPimacroR=n1i=1nRimacroF1=macroP+macroR2×macroP×macroR
  • 做法2:将每个混淆矩阵的元素平均,得到 T P ‾ 、 F P ‾ 、 T N ‾ , F N ‾ \overline{T P}_{、} \overline{F P}_{、} \overline{T N}, \overline{F N} TPFPTN,FN,再基于此计算微查准率(micro-P),微查全率(micro-R),微F1(micro-F1): micro ⁡ − P = T P ‾ T P ‾ + F P ‾ micro ⁡ − R = T P ‾ T P ‾ + F N ‾ micro ⁡ − F 1 = 2 × micro ⁡ − P × micro ⁡ − R micro ⁡ − P + micro ⁡ − R \begin{aligned} &\operatorname{micro}-P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}}\\ &\operatorname{micro}-R=\frac{\overline{T P}}{\overline{T P}+\overline{F N}}\\ &\operatorname{micro}-F 1=\frac{2 \times \operatorname{micro}-P \times \operatorname{micro}-R}{\operatorname{micro}-P+\operatorname{micro}-R} \end{aligned} microP=TP+FPTPmicroR=TP+FNTPmicroF1=microP+microR2×microP×microR

ROC和AUC曲线:
ROC曲线的生成过程类似P-R曲线,都是将结果排序,然后根据每次不同阈值点,将点之前的部分预测为正,点之后的部分预测为负,得到TP,FP,TN,FN。然后计算TPR(True Positive Rate),FPR(False Positive Rate),定义分别为:
T P R = T P T P + F N F P R = F P T N + F P \begin{aligned} \mathrm{TPR} &=\frac{T P}{T P+F N} \\ \mathrm{FPR} &=\frac{F P}{T N+F P} \end{aligned} TPRFPR=TP+FNTP=TN+FPFP
在这里插入图片描述
上图是两个ROC曲线,对角线则是随机猜想模型,而点(0,1)则是将所有正例排在所有反例之前的理想模型。现实中,我们绘制的ROC曲线则是b图,有限个样本测试后,根据结果排序依次绘制。绘制过程:从(0,0)开始,当前若为正例,向上得到 ( x , y + 1 m + ) \left(x, y+\frac{1}{m^{+}}\right) (x,y+m+1)(TP+1);若当前结果为反例,那么向右得到 ( x + 1 m − , y ) \left(x+\frac{1}{m^{-}}, y\right) (x+m1,y)(FP+1)。从这里我们更能看出,ROC反应的是模型能够将正例排在反例之前的能力,当所有正例均排在反例之前,那么只要找到合适的阈值点,则所有预测都正确。而AUC则是ROC曲线对应的面积,同样反应的是样本预测的排序质量。AUC的定义: A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) \mathrm{AUC}=\frac{1}{2} \sum_{i=1}^{m-1}\left(x_{i+1}-x_{i}\right) \cdot\left(y_{i}+y_{i+1}\right) AUC=21i=1m1(xi+1xi)(yi+yi+1)

2021-12-7
模型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值