1、经验误差与过拟合
**错误率(error rate):**分类错误的样本数占总样本数的比例。
例如:m个样本中有a个样本分类错误,错误率=a/m,准确度=1-a/m
**误差(error):**预测输出与样本真实输出之间的差异
**训练误差(trainning error)或经验误差(empirical error):**在训练集上的误差
**泛化误差(generalization):**在新样本上的误差
我们希望得到泛化误差小的模型,而实际上只能努力使经验误差最小。
为了学习器能在新样本上表现好,应该从训练样本中尽可能学习适用于所有潜在样本的普遍规律
**过拟合(overfitting):**学习能力太强大,把训练样本中不太一般的特性都学习到了。导致模型在训练样本上表现很好,而在新样本上表现差。(泛化能力差)
**欠拟合(underfitting)😗*学习能力太弱
过拟合无法避免,只能缓解或者说减小风险。
2、评估方法
模型选择理想的方案是选择泛化误差最小的模型。
通常,使用一个“测试集”来测试学习器对新样本的判别能力,以测试集上的测试误差作为泛化误差的近似。
因此,对数据集D划分为训练集S和测试集T,常见做法:
(1)留出法(hold out)
直接将数据集划分为两个互斥的集合。
注意:训练测试集的划分要尽可能保持数据分布一致。例如分类任务中至少保持样本类别比例一致,可采用分层采样(stratified sampling)。
通常,将2/3~4/5的样本用于训练,剩余样本用于测试。
(2)交叉验证(cross validation)
将数据集D划分为k个互斥的子集,每个子集
D
i
D_i
Di都尽可能保持数据分布一致性。每次用k-1个子集作为训练集,1个子集作为测试集,进行k次训练测试,最终返回k个测试结果的均值。
为了减少因样本划分引入差异,k折交叉验证通常要随机使用不同的划分重复p次。最终评估结果是p次k折交叉验证结果的均值。
(3)留一法(leave one out)
交叉验证的特例:数据集D中有m个样本,则令k=m,划分为k个子集,每个子集中只有一个样本。
缺陷是:数据集较大时,训练m个模型的开销太大。
(4)自助发(Bootstrapping)
对数据集D进行m次有放回的抽样产生数据集D’。一部分样本在D’中重复出现,一部分样本在D中不出现。
样本在m次采样中始终不被抽中的概率是:
(
1
−
1
m
)
m
(1-\frac{1}{m})^m
(1−m1)m,取极限得到
lim
m
→
∞
(
1
−
1
m
)
m
→
1
e
≈
0.368
\lim_{m\to\infty}(1-\frac{1}{m})^m \to \frac{1}{e}\approx0.368
limm→∞(1−m1)m→e1≈0.368
因此,数据集D中约有36.8%的数据在D’中不出现。
在数据集较小,难以有效划分训练测试集时,通过自助法可从初始数据集种产生多个不同的训练集。然而这样产生数据集的方法改变了原有数据集的分布,会引入估计偏差。
调参与最终模型
学习算法有很多参数需要设置,很多是在实数范围内取值,常用的做法是:对每个参数选定一个范围和步长,对每种参数配置都训练出模型,把对应最好模型的参数作为结果。
###3、性能度量(performance measure)
性能度量是衡量模型泛化能力的标准,反应了任务需求。模型的好坏是相对的,不仅取决于数据和算法,还取决于任务需求。
回归任务中最常用的性能度量是“均方误差”
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和概率密度函数p(·),均方误差为:
E
(
f
;
D
)
=
∫
x
∼
D
(
f
(
x
i
)
−
y
i
)
2
p
(
x
)
d
x
E(f;D)=\int_{x\sim D}(f(x_i)-y_i)^2p(x)dx
E(f;D)=∫x∼D(f(xi)−yi)2p(x)dx
####(1)错误率与精度
分类任务中,对于样例集D:
分类错误率定义为:
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
I
(
f
(
x
i
)
≠
y
i
)
E(f;D)=\frac{1}{m}\sum_{i=1}^mII(f(x_i)\neq y_i)
E(f;D)=m1i=1∑mII(f(xi)=yi)
精度定义为:
a
c
c
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
I
(
f
(
x
i
)
=
y
i
)
acc(f;D)=\frac{1}{m}\sum_{i=1}^mII(f(x_i)= y_i)
acc(f;D)=m1i=1∑mII(f(xi)=yi)
注:
I
I
(
f
(
x
i
)
≠
y
i
)
II(f(x_i)\neq y_i)
II(f(xi)=yi)是指示函数,即取值为0或1
更一般的,对数据分布D和概率密度函数p(·):
错误率为:
E
(
f
;
D
)
=
∫
x
∼
D
I
I
(
f
(
x
)
≠
y
)
p
(
x
)
d
x
E(f;D)=\int_{x\sim D}II(f(x) \neq y)p(x)dx
E(f;D)=∫x∼DII(f(x)=y)p(x)dx
精度为:
a
c
c
(
f
;
D
)
=
∫
x
∼
D
I
I
(
f
(
x
)
=
y
)
p
(
x
)
d
x
=
1
−
E
(
f
;
D
)
acc(f;D)=\int_{x\sim D}II(f(x)=y)p(x)dx =1-E(f;D)
acc(f;D)=∫x∼DII(f(x)=y)p(x)dx=1−E(f;D)
####(2)查全率,查准率,F1
以二分类为例:样例根据真实类别和预测类别的组合划分为:真正例TP(true positive),假正例FP(false positive),真反例TN(true negative),假反例FN(false negative),TP+FP+TN+FN=样例总数。
查准率or准确率(precision)
P
=
T
P
T
P
+
F
P
P=\frac{TP}{TP+FP}
P=TP+FPTP
查全率or召回率(recall)
R
=
T
P
T
P
+
F
N
R=\frac{TP}{TP+FN}
R=TP+FNTP
准确率、召回率是一对矛盾的度量,比较难达到两个都很高。
查准率-查全率曲线,P-R曲线
以查准率做纵轴,查全率做横轴,
如何来衡量学习器的好坏?
a) 平衡点(break-event point)
precise=recall时的取值
例如:A的平衡点取值大于B,可认为A优于B
b)F1度量
F1是基于recall和precision的调和平均
1
F
1
=
1
2
⋅
(
1
P
+
1
R
)
\frac{1}{F1}=\frac{1}{2}·(\frac{1}{P}+\frac{1}{R})
F11=21⋅(P1+R1)
算数平均和集合平均相比,调和平均更重视较小值。
F
1
=
2
∗
P
∗
R
P
+
R
=
2
∗
T
P
样
例
总
数
+
T
P
−
T
N
F1=\frac{2*P*R}{P+R}=\frac{2*TP}{样例总数+TP-TN}
F1=P+R2∗P∗R=样例总数+TP−TN2∗TP
在不同的应用场景中,对recall和precision的重视程度不同。例如广告推荐中,为了避免打扰用户,precision更重要。
体现recall和precision的偏好,有 F β F_\beta Fβ, F β F_\beta Fβ是加权调和平均:
1
F
β
=
1
1
+
β
2
⋅
(
1
P
+
β
2
R
)
\frac{1}{F_\beta}=\frac{1}{1+\beta^2}·(\frac{1}{P}+\frac{\beta^2}{R})
Fβ1=1+β21⋅(P1+Rβ2)
β
>
1
\beta>1
β>1时,recall影响大,
β
<
1
\beta<1
β<1时,precision影响大。
当有多次训练测试,or多分类任务有多个混淆矩阵时,考察全局性能,可以:
1)分别求(
P
i
P_i
Pi,
R
i
R_i
Ri),再计算平均值,得到宏查准率(macro-P),宏查全率(macro-R),宏F1。
2)对TP,FP,TN,FN取平均值,再计算微查全率(micro-P),微查准率(micro-R),微F1
####(3) ROC 和 AUC
很多学习器为测试样本产生一个概率预测[0,1],然后将预测值与分类阈值进行比较,大于阈值则为正类,小于阈值则为反类。
ROC(receiver operating characteristic)受试者工作特征
以TPR(true positive rate)真正例率为纵轴,FPR(false positive rate)假正例率为横轴。
T
P
R
=
T
P
T
P
+
F
N
TPR=\frac{TP}{TP+FN}
TPR=TP+FNTP
F
P
R
=
F
P
T
N
+
F
P
FPR=\frac{FP}{TN+FP}
FPR=TN+FPFP
绘制ROC曲线
给定
m
+
m^+
m+个正例和
m
−
m^-
m−个反例,根据预测结果对样例排序;先把阈值设为最大,在(0,0)出标记一个点,然后把阈值依次设为样例的预测值,计算TPR,FPR,描点,连线。
AUC(area under roc curve)
通过比较ROC曲线下的面积来判断好坏。
AUC可估算为:
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)
####(4)代价敏感错误率与代价曲线
不同类型的错误造成的后果不同,因此为了权衡错误造成的损失,设置非均等代价
以二分类为例,设定代价矩阵:
在非均等代价下,不再是最小化错误次数,而是最小化总体代价(total cost),令
D
+
D^+
D+,
D
−
D^-
D−分别代表正例子集和反例子集,则代价敏感错误率为:
E
(
f
;
D
;
c
o
s
t
)
=
1
m
(
∑
x
i
∈
D
+
I
I
(
f
(
x
i
)
≠
y
i
)
∗
c
o
s
t
01
+
∑
x
i
∈
D
−
I
I
(
f
(
x
i
)
≠
y
i
)
∗
c
o
s
t
10
)
E(f;D;cost)=\frac{1}{m}(\sum_{x_i\in D^+}II(f(x_i)\neq y_i)*cost_{01}+\sum_{x_i\in D^-}II(f(x_i)\neq y_i)*cost_{10})
E(f;D;cost)=m1(xi∈D+∑II(f(xi)=yi)∗cost01+xi∈D−∑II(f(xi)=yi)∗cost10)
###4、比较检验
机器学习中性能比较是很复杂的一件事,(我们用测试性能来近似泛化性能;而这跟测试集的选取有很大关系;很多机器学习算法本身有一定随机性)。
所以,**统计假设检验(hypothesis test)**可以为性能比较提供重要依据。基于假设检验,我们可以推断 如果测试集上A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
####(1)假设检验
假设“假设”是对学习器泛化错误率分布的猜想。
泛化错误率为
ϵ
\epsilon
ϵ的学习器在一个样本上犯错的概率为
ϵ
\epsilon
ϵ;
测试错误率
ϵ
^
\hat\epsilon
ϵ^意味着m个测试样本中有
ϵ
^
∗
m
\hat\epsilon *m
ϵ^∗m个被误分类。那么,泛化错误率为
ϵ
\epsilon
ϵ的学习器被测得测试错误率为
ϵ
^
\hat\epsilon
ϵ^的概率为:
P
(
ϵ
^
;
ϵ
)
=
C
m
m
∗
ϵ
^
∗
ϵ
m
∗
ϵ
^
∗
(
1
−
ϵ
)
m
−
m
∗
ϵ
^
P(\hat\epsilon;\epsilon)=C_m^{m*\hat\epsilon}*\epsilon^{m*\hat\epsilon}*(1-\epsilon)^{m-m*\hat\epsilon}
P(ϵ^;ϵ)=Cmm∗ϵ^∗ϵm∗ϵ^∗(1−ϵ)m−m∗ϵ^
给定测试错误率,解$\frac{\partial P(\hat\epsilon;\epsilon)}{\partial \epsilon}=0
可
知
,
可知,
可知,\epsilon=\hat\epsilon
时
,
时,
时,P(\hat\epsilon;\epsilon)
最
大
,
最大,
最大,\vert\epsilon-\hat\epsilon
增
大
时
,
增大时,
增大时,P(\hat\epsilon;\epsilon)
减
小
;
这
是
一
个
二
项
式
分
布
,
即
表
示
在
m
次
事
件
中
,
碰
巧
发
生
减小;这是一个二项式分布,即表示在m次事件中,碰巧发生
减小;这是一个二项式分布,即表示在m次事件中,碰巧发生m*\hat\epsilon$次情况的概率
如上图,若
ϵ
=
0.3
\epsilon=0.3
ϵ=0.3,则10个样本中测得3个样本被误分类的概率最大。
对单个学习器泛化性能的假设检验:
1)二项检验(binomial test)
可用二项检验对
ϵ
≤
0.3
\epsilon\le0.3
ϵ≤0.3(泛化错误率是否不大于0.3)的假设进行检验。
更一般的对假设
ϵ
≤
ϵ
0
\epsilon\le\epsilon_0
ϵ≤ϵ0进行检验,对分类错误数大于
m
∗
ϵ
0
m*\epsilon_0
m∗ϵ0的概率求和,判断是否小于显著度标准
α
\alpha
α。如果小于则接受假设,否则拒绝假设。
1
−
α
1-\alpha
1−α反映了结论的置信度。一般
α
\alpha
α取0.05,0.1
ϵ ˉ = m a x ϵ s . t . ∑ i = m ∗ ϵ 0 + 1 m ϵ i ∗ ( 1 − ϵ ) m − i < α \bar\epsilon=max \ \epsilon \; s.t. \sum_{i=m*\epsilon_0+1}^m\epsilon^i*(1-\epsilon)^{m-i}\lt\alpha ϵˉ=max ϵs.t.i=m∗ϵ0+1∑mϵi∗(1−ϵ)m−i<α
此时若
ϵ
^
<
\hat\epsilon<
ϵ^<临界值
ϵ
ˉ
\bar\epsilon
ϵˉ,则根据二项检验可得出结论:在
α
\alpha
α的显著度下,假设
ϵ
≤
ϵ
0
\epsilon\le\epsilon_0
ϵ≤ϵ0不能被拒绝,即以
1
−
α
1-\alpha
1−α的置信度认为学习器的泛化错误率不大于
ϵ
0
\epsilon_0
ϵ0。
2)t检验(t test)
通过交叉验证法等进行多次训练测试,会得到多个测试错误率。假设得到了k个测试错误率
ϵ
^
1
,
ϵ
^
2
,
.
.
.
,
ϵ
^
k
\hat\epsilon_1,\hat\epsilon_2,...,\hat\epsilon_k
ϵ^1,ϵ^2,...,ϵ^k,平均测试错误率
μ
\mu
μ和方差
σ
2
\sigma^2
σ2为:
μ
=
1
k
∑
i
=
1
k
ϵ
^
i
\mu=\frac{1}{k}\sum_{i=1}^k\hat\epsilon_i
μ=k1i=1∑kϵ^i
σ
2
=
1
k
−
1
∑
i
=
1
k
(
ϵ
^
i
−
μ
)
2
\sigma^2=\frac{1}{k-1}\sum_{i=1}^k(\hat\epsilon_i-\mu)^2
σ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分布
对假设
μ
=
ϵ
0
\mu=\epsilon_0
μ=ϵ0和显著度
α
\alpha
α,可计算出当测试错误率均值为
ϵ
0
\epsilon_0
ϵ0时,在
1
−
α
1-\alpha
1−α概率内能观测到的最大错误率,即临界值。
若平均错误率
μ
\mu
μ与
ϵ
0
\epsilon_0
ϵ0之差
∣
μ
−
ϵ
0
\vert\mu-\epsilon_0
∣μ−ϵ0位于临界值范围
[
t
−
α
/
2
,
t
α
/
2
]
[t_{-\alpha/2},t_{\alpha/2}]
[t−α/2,tα/2]内,则不能拒绝假设
μ
=
ϵ
0
\mu=\epsilon_0
μ=ϵ0,即可认为泛化错误率为
ϵ
0
\epsilon_0
ϵ0,置信度为
1
−
α
1-\alpha
1−α;否则可拒绝该假设。一般
α
\alpha
α取0.05,0.1
两个学习器泛化性能比较检验:
1)交叉验证t检验
使用k折交叉验证法,对学习器A和B分别得到的测试错误率
ϵ
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)”来进行比较检验。
基本思想:若AB性能相同,则使用相同测试集的测试错误率应相同,即
ϵ
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,若学习器性能相同则差的均值应为0。
根据差值
Δ
0
,
Δ
1
,
.
.
.
,
Δ
k
\Delta_0,\Delta_1,...,\Delta_k
Δ0,Δ1,...,Δk来对假设“学习器A和B性能相同”这个假设做t检验,计算差的均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2,在显著度
α
\alpha
α下,若变量
τ
t
=
∣
k
μ
σ
\tau_t=\vert\frac{\sqrt k\mu}{\sigma}
τt=∣σkμ
小于临界值
t
α
/
2
,
k
−
1
t_{\alpha/2,k-1}
tα/2,k−1,则假设不能被拒绝,即认为两个学习器性能没有显著差别,置信度
1
−
α
1-\alpha
1−α;否则认为有显著差别。
t
α
/
2
,
k
−
1
t_{\alpha/2,k-1}
tα/2,k−1是自由度为k-1的t分布上尾部累计分布为
α
/
2
\alpha/2
α/2的临界值。
2)McNeMar检验
对二分类问题,使用留出法,对学习器A和B分类结果的差别,如“列联表(contingency table)”所示:
假设“学习器A和B性能相同”,则应有
e
01
=
e
10
e_{01}=e_{10}
e01=e10,那么变量
e
01
−
e
10
e_{01}-e_{10}
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}={( |e_{01}-e_{10}|-1)^2}\over{e_{01}+e_{10}}
e01+e10τχ2=(∣e01−e10∣−1)2
服从自由度为1的
χ
2
\chi^2
χ2分布,即标准正态分布变量的平方。
给定显著度
α
\alpha
α,当以上变量值小于临界值
χ
α
2
\chi_\alpha^2
χα2时,不能拒绝假设。
多个学习器泛化性能比较检验:
1)Friedman检验
2)Nemenyi后序检验
###5、偏差与方差
用“偏差-方差分解”(bias-variance decomposition)来解释学习算法的泛化性能–为什么具有这样的性能。
对测试样本
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上学得模型
f
f
f在
x
x
x上的预测输出。
以回归任务为例:
学习算法的期望预测为:
f
ˉ
(
x
)
=
E
D
[
f
(
x
;
D
)
]
\bar f(x)=\Bbb 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)=\Bbb E_D[(f(x;D)-\bar f(x))^2]
var(x)=ED[(f(x;D)−fˉ(x))2]
噪声为:
ε
2
=
E
D
[
(
y
D
−
y
)
2
]
\varepsilon^2=\Bbb E_D[(y_D-y)^2]
ε2=ED[(yD−y)2]
偏差(期望输出与真实标记的差别):
b
i
a
s
2
(
x
)
=
(
f
ˉ
(
x
)
−
y
)
2
bias^2(x)=(\bar f(x)-y)^2
bias2(x)=(fˉ(x)−y)2
偏差-方差分解对学习算法的期望泛化误差错误率进行拆解。
E
(
f
;
D
)
=
b
i
a
s
2
(
x
)
+
v
a
r
(
x
)
+
ε
2
E(f;D)=bias^2(x)+var(x)+\varepsilon^2
E(f;D)=bias2(x)+var(x)+ε2
即,泛化误差可分解为偏差、方差与噪声之和。
偏差度量了学习算法的期望预测与真实结果的偏离程度(学习算法本身的拟合能力)
方差度量了同样大小的训练集的变动所导致的学习性能的变化(数据扰动所造成的影响)
噪声表达了当前任务上任何学习算法所能达到的期望泛化误差的下界(学习问题本身的难度)
即,泛化性能是由学习算法的能力、数据的充分性及学习任务本身的难度共同来决定的。
训练不足时,学习器的拟合能力不够强,此时偏差主导了泛化错误。
训练充足后,学习器拟合能力已经很强,训练数据发生的扰动渐渐能被学习器学习到,方差主导泛化错误率。若训练数据的非全局特性被学习器学到了,将发生过拟合。