模型评估与选择
二分类问题的泛化误差上界
T={(xi,yi)} 来自于联合概率分布
P(X,Y) 且有
X∈Rn,Y∈{−1,+1} ,而且
F={f1,...,fn} , 损失函数为
0−1 损失
则关于
f 的期望风险与经验风险为
R(f)=E[L(Y,f(X))]
R^(f)=N1i=1∑NL(yi,f(xi))
则经验风险最小化函数为
f^=argf∈FminR^(f)
fN的泛化能力为
R(f^)=E[L(Y,f^(X))]
则对于任意一个函数,以概率
1−δ 有
R(f)≤R^(f)+ϵ(d,N,δ)
其中
ϵ(d,N,δ)=2N1(logd+logδ1)
Hoeffding 不等式:
P(ESn−Sn≥t)≤exp(∑i=1n(bi−a1)2−2t2),∀t>0
其中
Sn=∑i=1nXi是独立随机变量
X1,...,Xn之和,且
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 ), 真负,被正确预测的负样本数
二级指标
- 真正率
TPR 或者 灵敏度
(Sensitivity)
- 模型正确预测的正样本比例
-
TPR=TP/(TP+FN)
- 真负率
TNR 或者 特指度
(Specificity)
- 模型正确预测的负样本比例
-
TNR=TN/(TN+FP)
- 假正率
FPR
- 被预测为正类的负样本比例
-
FPR=FP/(TN+FP)
- 假负率
FNR
- 被预测为负类的正样本比例
-
FNR=FN/(TP+FN)
- 查准率
percision
- 预测为正类的样本中实际为正类的比例
-
p=TP/(TP+FP)
- 召回率
recall
- 被模型正确预测的正样本比例
- 高召回意味着,很少将正样本误分为负样本
-
r=TP/(TP+FN)
三级指标
F1−Score:
-
F=r+p2rp=2TP+FN+FP2TP
- 精度与召回的调和平均
F2=r1+p1
其余指标
-
P−R 曲线
-
Fβ=r+β2p(β2+1)rp
ROC 曲线 与 AUC
-
ROC(Receiver Operating Characteristic)
-
TPR 沿
y 轴绘制,
FPR 沿
x 轴绘制
- 曲线每一个点对应了不同阈值下的一个模型
Code:
def plotroc(classscore,label):
import matplotlib.pyplot as plt
current = [1.0,1.0]
ysum = 0
numpos = sum(np.array(label)==1.0)
ystep = 1/float(numpos)
xstep = 1/float(len(label)-numpos)
sortindex = classscore.T.argsort()
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]
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)
交叉验证
如何估计模型的泛化能力?
- 交叉验证
(CrossValidation)
- 留一法
(Leave−One−OutCrossValidation)
留一法的每一回合都用了几乎所有样本进行训练;同时没有随机因素的影响;但是计算成本太高。
自助法
(bootstrapping)
利用自助采样法为基础
自助法重复
m 次得到包含
m 个样本的数据集
D′
m−>∞lim(1−m1)m−>e1≈0.368
正则化
(regularization)
f∈FminN1i=1∑NL(yi,f(xi))+λJ(f),λ≥0
常见的惩罚:
L1,L2惩罚。
模型比较
-
t 检验
两个学习器
A,B
在
k 折交叉验证下的训练误差为
ϵ1A,...,ϵkA;ϵ1B,...,ϵkB
如果两个模型性能相同,则有
Δi=ϵiA−ϵiB=0
所以有假设检验统计量
var(ϵA−ϵB)/k
∣mean(ϵA−ϵB)∣∼t(k−1)
-
Mcnemar 检验
A,B |
T |
F |
T |
e00 |
e01 |
F |
e10 |
e11 |
如果两个算法性能相同,则表现相同,则有
e01=e10
对应的统计量为
τχ2=e01+e10(∣e01−e10∣−1)2∼χ2(1)
-
Friedman & Nemenyi 检验
这是一个非参数检验法
每一个元素为对应的性能排序值,如需哦性能一样,则平分序值
数据集 |
A |
B |
C |
D1 |
rank |
|
|
D2 |
|
|
|
D3 |
|
|
|
D4 |
|
|
|
平均序值 |
|
|
|
统计量为:
τχ2=kk−1∗k2−112Ni=1∑k(ri−2k+1)2=k(k+1)12N(i=1∑kri2−4k(k+1)2)
当
k 和
N 较大时,服从
χ2(k−1) 分布
偏差-方差分解
E(f;D)=bias2(x)+var(x)+ϵ2
=(fˉ(x)−y)2+ED[(f(x;D)−fˉ(x))2]+ED[(yD−y)2]