模型评估与选择_简易版

模型评估与选择


二分类问题的泛化误差上界

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\} XRn,Y{1,+1} ,而且 F = { f 1 , . . . , f n } F = \{f_1,...,f_n\} F={f1,...,fn} , 损失函数为 0 − 1 0-1 01 损失

则关于 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=1NL(yi,f(xi))

则经验风险最小化函数为

f ^ = a r g min ⁡ f ∈ F R ^ ( f ) \hat f = arg \min\limits _{f\in F} \hat R (f) f^=argfFminR^(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(ESnSnt)exp(i=1n(bia1)22t2),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]


混淆矩阵

10
1a (TP)b (FN)
0c (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 F1Score:

  • 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 PR 曲线
  • 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) (LeaveOneOutCrossValidation)

留一法的每一回合都用了几乎所有样本进行训练;同时没有随机因素的影响;但是计算成本太高。


自助法 ( 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(1m1)m>e10.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 fFminN1i=1NL(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(k1)
  • M c n e m a r Mcnemar Mcnemar 检验
A,BTF
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(e01e101)2χ2(1)

  • F r i e d m a n   &   N e m e n y i Friedman\ \&\ Nemenyi Friedman & Nemenyi 检验
    这是一个非参数检验法
    每一个元素为对应的性能排序值,如需哦性能一样,则平分序值
数据集ABC
D 1 D_1 D1rank
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=kk1k2112Ni=1k(ri2k+1)2=k(k+1)12N(i=1kri24k(k+1)2)

k k k N N N 较大时,服从 χ 2 ( k − 1 ) \chi^2(k-1) χ2(k1) 分布


偏差-方差分解

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[(yDy)2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值