经验误差和过拟合
- 模型在训练集上的误差称为:“训练误差”,也叫经验误差。在新样本上的误差称为:“泛化误差”。显然,我们想要得到一个泛化误差较小的模型。然而,在实际情况中,我们往往不能事先知道新样本是什么样,因此我们能做的就是努力减小经验误差。
- 过拟合:把训练样本自身的一些特性当作所有潜在样本的共性,这样会导致模型泛化性能下降(个性当共性)。过拟合是无法彻底避免的,我们能做只是缓解,或者减小其风险。
过拟合的一般解决方案:
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 迁移学习:还有说迁移学习也是一种解决过拟合的办法,前提如果数据太过简单,我们可以尝试使用一个在类似任务上训练好的模型,固定一部分参数层,单独训练很少的层。这看起来也是约束模型的学习能力。 - 欠拟合:尚未完全学习到所有样本的共性。一般欠拟合容易克服,我们可以增加训练次数,决策树增加分支等。
测试集生成
我们选择一个理想的模型是泛化误差较小的模型,但是又无法直接获得泛化误差,此时就需要一个测试集来测试模型的泛化能力,作为泛化误差的近似。测试集的选择应当与训练集互斥,即:测试样本尽量不要出现在训练集中,未在训练集中使用。
- 留出法:直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即:
D
=
S
∪
T
,
S
∩
T
=
∅
D=S \cup T, S \cap T=\varnothing
D=S∪T,S∩T=∅
采用此种方法划分时,尽量保持训练/测试集分布一致。使用留出法,一般采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。 - 交叉验证法:事先将数据集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=D1∪D2∪…∪Dk,Di∩Dj=∅(i=j),每个子集都尽量保持数据分布一致;然后每次选择k-1子集作为训练集,余下的那个作为测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。故k的取值很关键,一般取k=10,称为10折交叉验证。通常为了取不同的划分方法,k折交叉验证的随机划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的10次10折交叉验证。
还有一个特例,若D含有m个样本,令k=m,那么成为留一法。留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,但是数据集较大时,计算开销大。 - 自助法:直接用自助采样的方法,每次从D中随机选择一个样本,将其拷贝放入D’,并将样本放回,使得该样本下次采样时仍可能被采集;这个过程重复m次后,生成D’。显然,有一部分样本会在 D’中重复出现,一部分样本不出现。样本在m次采样中始终不被采样到的概率为
(
1
−
1
m
)
m
\left(1-\frac{1}{m}\right)^{m}
(1−m1)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
m→∞lim(1−m1)m↦e1≈0.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=1∑m(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)=∫x∼D(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=1∑mI(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=1∑mI(f(xi)=yi)=1−E(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)=∫x∼DI(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)=∫x∼DI(f(x)=y)p(x)dx=1−E(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= 样例总数 +TP−TN2×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} macro−P=n1i=1∑nPimacro−R=n1i=1∑nRimacro−F1=macro−P+macro−R2×macro−P×macro−R
- 做法2:将每个混淆矩阵的元素平均,得到 T P ‾ 、 F P ‾ 、 T N ‾ , F N ‾ \overline{T P}_{、} \overline{F P}_{、} \overline{T N}, \overline{F N} TP、FP、TN,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} micro−P=TP+FPTPmicro−R=TP+FNTPmicro−F1=micro−P+micro−R2×micro−P×micro−R
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+m−1,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=1∑m−1(xi+1−xi)⋅(yi+yi+1)
2021-12-7
模型