模型评估与选择
二分类问题的泛化误差上界
T = { ( x i , y i ) } T = \{(x_i,y_i)\} T={(xi,yi)} 来自于联合概率分布 P ( X , Y ) P(X,Y) P(X,Y) 且有 X ∈ R n , Y ∈ { − 1 , + 1 } X \in R^n, Y \in \{-1,+1\} X∈Rn,Y∈{−1,+1} ,而且 F = { f 1 , . . . , f n } F = \{f_1,...,f_n\} F={f1,...,fn} , 损失函数为 0 − 1 0-1 0−1 损失
则关于 f f f 的期望风险与经验风险为
R ( f ) = E [ L ( Y , f ( X ) ) ] R(f) = E[L(Y,f(X))] R(f)=E[L(Y,f(X))]
R ^ ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) \hat R (f) = \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) R^(f)=N1i=1∑NL(yi,f(xi))
则经验风险最小化函数为
f
^
=
a
r
g
min
f
∈
F
R
^
(
f
)
\hat f = arg \min\limits _{f\in F} \hat R (f)
f^=argf∈FminR^(f)
f
N
f_N
fN的泛化能力为
R ( f ^ ) = E [ L ( Y , f ^ ( X ) ) ] R(\hat f) = E[L(Y,\hat f(X))] R(f^)=E[L(Y,f^(X))]
则对于任意一个函数,以概率 1 − δ 1-\delta 1−δ 有
R ( f ) ≤ R ^ ( f ) + ϵ ( d , N , δ ) R(f) \leq \hat R(f) + \epsilon(d,N,\delta) R(f)≤R^(f)+ϵ(d,N,δ)
其中 ϵ ( d , N , δ ) = 1 2 N ( log d + log 1 δ ) \epsilon(d,N,\delta) = \sqrt {\frac{1}{2N}(\log d+\log \frac{1}{\delta})} ϵ(d,N,δ)=2N1(logd+logδ1)
H
o
e
f
f
d
i
n
g
Hoeffding
Hoeffding 不等式:
P
(
E
S
n
−
S
n
≥
t
)
≤
e
x
p
(
−
2
t
2
∑
i
=
1
n
(
b
i
−
a
1
)
2
)
,
∀
t
>
0
P(ES_n - S_n \geq t) \leq exp(\frac{-2t^2}{\sum_{i=1}^n(b_i-a_1)^2}),\forall t>0
P(ESn−Sn≥t)≤exp(∑i=1n(bi−a1)2−2t2),∀t>0
其中
S
n
=
∑
i
=
1
n
X
i
S_n = \sum_{i=1}^nX_i
Sn=∑i=1nXi是独立随机变量
X
1
,
.
.
.
,
X
n
X_1,...,X_n
X1,...,Xn之和,且
X
i
∈
[
a
i
,
b
i
]
X_i \in [a_i,b_i]
Xi∈[ai,bi]
混淆矩阵
1 | 0 | |
---|---|---|
1 | a (TP) | b (FN) |
0 | c (FP) | d (TN) |
一级指标
- TP ( true positive ),真正,被正确预测的正样本数
- FN ( false negative ),假负,被错误预测为负类的正样本数
- FP ( false positive ),假正, 被错误预测为正类的负样本数
- TN ( true negative ), 真负,被正确预测的负样本数
二级指标
- 真正率
T
P
R
TPR
TPR 或者 灵敏度
(
S
e
n
s
i
t
i
v
i
t
y
)
(Sensitivity)
(Sensitivity)
- 模型正确预测的正样本比例
- T P R = T P / ( T P + F N ) TPR = TP / (TP+FN) TPR=TP/(TP+FN)
- 真负率
T
N
R
TNR
TNR 或者 特指度
(
S
p
e
c
i
f
i
c
i
t
y
)
(Specificity)
(Specificity)
- 模型正确预测的负样本比例
- T N R = T N / ( T N + F P ) TNR = TN / (TN+FP) TNR=TN/(TN+FP)
- 假正率
F
P
R
FPR
FPR
- 被预测为正类的负样本比例
- F P R = F P / ( T N + F P ) FPR = FP / (TN+FP) FPR=FP/(TN+FP)
- 假负率
F
N
R
FNR
FNR
- 被预测为负类的正样本比例
- F N R = F N / ( T P + F N ) FNR = FN / (TP+FN) FNR=FN/(TP+FN)
- 查准率
p
e
r
c
i
s
i
o
n
percision
percision
- 预测为正类的样本中实际为正类的比例
- p = T P / ( T P + F P ) p = TP / (TP + FP) p=TP/(TP+FP)
- 召回率
r
e
c
a
l
l
recall
recall
- 被模型正确预测的正样本比例
- 高召回意味着,很少将正样本误分为负样本
- r = T P / ( T P + F N ) r = TP / (TP + FN) r=TP/(TP+FN)
三级指标
F 1 − S c o r e F_1 - Score F1−Score:
- F = 2 r p r + p = 2 T P 2 T P + F N + F P F = \frac{2rp}{r+p} = \frac{2TP}{2TP+ FN + FP} F=r+p2rp=2TP+FN+FP2TP
- 精度与召回的调和平均 2 F = 1 r + 1 p \frac{2}{F} = \frac{1}{r} + \frac{1}{p} F2=r1+p1
其余指标
- P − R P-R P−R 曲线
- F β = ( β 2 + 1 ) r p r + β 2 p F_\beta = \frac{(\beta^2 + 1)rp}{r + \beta^2 p} Fβ=r+β2p(β2+1)rp
ROC 曲线 与 AUC
- R O C ( R e c e i v e r O p e r a t i n g C h a r a c t e r i s t i c ) ROC (Receiver\ Operating\ Characteristic) ROC(Receiver Operating Characteristic)
- T P R TPR TPR 沿 y y y 轴绘制, F P R FPR FPR 沿 x x x 轴绘制
- 曲线每一个点对应了不同阈值下的一个模型
C o d e Code Code:
# From 尹昊宇
#ROC曲线 y轴为真阳率(TP/(TP+FN)) x轴为假阳率(FP/FP+TN)
def plotroc(classscore,label):
import matplotlib.pyplot as plt
current = [1.0,1.0] #用于记录当前绘图光标停止的位置,初始位置为(1,1),即全部预测为正类
ysum = 0 #计算ROC曲线下的面积
numpos = sum(np.array(label)==1.0) #计算训练样本中正类个数
ystep = 1/float(numpos) #计算y的步长,相当于1/TP+FN
xstep = 1/float(len(label)-numpos) #计算x的步长,相当于1/FP+TN
sortindex = classscore.T.argsort() #将该矩阵(m*1)从小到到大排序,返回索引
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
for index in sortindex.tolist(): #将所有样本从得分最小的开始依次预测为反类
if label[index] == 1.0:
delx = 0
dely = -ystep
else:
delx = -xstep
dely = 0
ysum += current[1] #面积计算时,只有x轴发生偏移,才需要加一下此时y轴高度
#由于面积可以看作是多个长方形之和,长方形宽一样,只要计算长(y)的和即可
ax.plot([current[0],current[0]+delx],[current[1],current[1]+dely],c = 'b')
current = [current[0]+delx,current[1]+dely]
ax.plot([0,1],[0,1],'b--')#蓝色虚线
ax.axis([-0.05,1.05,-0.05,1.05])
plt.show()
return ysum*xstep
auc = plotroc(prob,label)
交叉验证
如何估计模型的泛化能力?
- 交叉验证 ( C r o s s V a l i d a t i o n ) (Cross Validation) (CrossValidation)
- 留一法 ( L e a v e − O n e − O u t C r o s s V a l i d a t i o n ) (Leave-One-Out Cross Validation) (Leave−One−OutCrossValidation)
留一法的每一回合都用了几乎所有样本进行训练;同时没有随机因素的影响;但是计算成本太高。
自助法 ( b o o t s t r a p p i n g ) (bootstrapping) (bootstrapping)
利用自助采样法为基础
自助法重复 m m m 次得到包含 m m m 个样本的数据集 D ′ D' D′
lim m − > ∞ ( 1 − 1 m ) m − > 1 e ≈ 0.368 \lim_{m -> \infty}(1-\frac{1}{m})^m -> \frac{1}{e} \approx 0.368 m−>∞lim(1−m1)m−>e1≈0.368
正则化 ( r e g u l a r i z a t i o n ) (regularization) (regularization)
min f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) , λ ≥ 0 \min_{f\in F} \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i))+ \lambda J(f), \lambda \geq 0 f∈FminN1i=1∑NL(yi,f(xi))+λJ(f),λ≥0
常见的惩罚:
L1,L2惩罚。
模型比较
-
t
t
t 检验
两个学习器 A , B A,B A,B
在 k k k 折交叉验证下的训练误差为 ϵ 1 A , . . . , ϵ k A ; ϵ 1 B , . . . , ϵ k B \epsilon_1^A,...,\epsilon_k^A;\epsilon_1^B,...,\epsilon_k^B ϵ1A,...,ϵkA;ϵ1B,...,ϵkB
如果两个模型性能相同,则有 Δ i = ϵ i A − ϵ i B = 0 \Delta_i = \epsilon_i^A - \epsilon_i^B = 0 Δi=ϵiA−ϵiB=0
所以有假设检验统计量 ∣ m e a n ( ϵ A − ϵ B ) ∣ v a r ( ϵ A − ϵ B ) / k ∼ t ( k − 1 ) \frac{|mean(\epsilon^A - \epsilon^B)|}{var(\epsilon^A - \epsilon^B)/\sqrt k} \sim t(k-1) var(ϵA−ϵB)/k∣mean(ϵA−ϵB)∣∼t(k−1) - M c n e m a r Mcnemar Mcnemar 检验
A,B | T | F |
---|---|---|
T | e 00 e_{00} e00 | e 01 e_{01} e01 |
F | e 10 e_{10} e10 | e 11 e_{11} e11 |
如果两个算法性能相同,则表现相同,则有
e
01
=
e
10
e_{01} = e_{10}
e01=e10
对应的统计量为
τ
χ
2
=
(
∣
e
01
−
e
10
∣
−
1
)
2
e
01
+
e
10
∼
χ
2
(
1
)
\tau_{\chi^2} = \frac{(|e_{01} - e_{10}| - 1)^2}{e_{01}+e_{10}} \sim \chi^2(1)
τχ2=e01+e10(∣e01−e10∣−1)2∼χ2(1)
-
F
r
i
e
d
m
a
n
&
N
e
m
e
n
y
i
Friedman\ \&\ Nemenyi
Friedman & Nemenyi 检验
这是一个非参数检验法
每一个元素为对应的性能排序值,如需哦性能一样,则平分序值
数据集 | A | B | C |
---|---|---|---|
D 1 D_1 D1 | rank | ||
D 2 D_2 D2 | |||
D 3 D_3 D3 | |||
D 4 D_4 D4 | |||
平均序值 |
统计量为:
τ χ 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 ) \tau_{\chi^2} = \frac{k-1}{k} * \frac{12N}{k^2 - 1}\sum_{i=1}^k(r_i - \frac{k+1}{2})^2 = \frac{12N}{k(k+1)}(\sum_{i=1}^kr_i^2 - \frac{k(k+1)^2}{4}) τχ2=kk−1∗k2−112Ni=1∑k(ri−2k+1)2=k(k+1)12N(i=1∑kri2−4k(k+1)2)
当 k k k 和 N N N 较大时,服从 χ 2 ( k − 1 ) \chi^2(k-1) χ2(k−1) 分布
偏差-方差分解
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
=
(
f
ˉ
(
x
)
−
y
)
2
+
E
D
[
(
f
(
x
;
D
)
−
f
ˉ
(
x
)
)
2
]
+
E
D
[
(
y
D
−
y
)
2
]
= (\bar f(x) - y)^2 + E_D[(f(x;D) - \bar f(x))^2]+ E_D[(y_D - y)^2]
=(fˉ(x)−y)2+ED[(f(x;D)−fˉ(x))2]+ED[(yD−y)2]