模型评估与选择_简易版

模型评估与选择


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

T = { ( x i , y i ) } T = \{(x_i,y_i)\} 来自于联合概率分布 P ( X , Y ) P(X,Y) 且有 X R n , Y { 1 , + 1 } X \in R^n, Y \in \{-1,+1\} ,而且 F = { f 1 , . . . , f n } F = \{f_1,...,f_n\} , 损失函数为 0 1 0-1 损失

则关于 f f 的期望风险与经验风险为

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))

则经验风险最小化函数为

f ^ = a r g min f F R ^ ( f ) \hat f = arg \min\limits _{f\in F} \hat R (f)
f N f_N 的泛化能力为

R ( f ^ ) = E [ L ( Y , f ^ ( X ) ) ] R(\hat f) = E[L(Y,\hat f(X))]

则对于任意一个函数,以概率 1 δ 1-\delta

R ( f ) R ^ ( f ) + ϵ ( d , N , δ ) R(f) \leq \hat R(f) + \epsilon(d,N,\delta)

其中 ϵ ( d , N , δ ) = 1 2 N ( log d + log 1 δ ) \epsilon(d,N,\delta) = \sqrt {\frac{1}{2N}(\log d+\log \frac{1}{\delta})}

H o e f f d i n g 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
其中 S n = i = 1 n X i S_n = \sum_{i=1}^nX_i 是独立随机变量 X 1 , . . . , X n X_1,...,X_n 之和,且 X i [ a i , b i ] X_i \in [a_i,b_i]


混淆矩阵

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 或者 灵敏度 ( S e n s i t i v i t y ) (Sensitivity)
    • 模型正确预测的正样本比例
    • T P R = T P / ( T P + F N ) TPR = TP / (TP+FN)
  • 真负率 T N R TNR 或者 特指度 ( S p e c i f i c i t y ) (Specificity)
    • 模型正确预测的负样本比例
    • T N R = T N / ( T N + F P ) TNR = TN / (TN+FP)
  • 假正率 F P R FPR
    • 被预测为正类的负样本比例
    • F P R = F P / ( T N + F P ) FPR = FP / (TN+FP)
  • 假负率 F N R FNR
    • 被预测为负类的正样本比例
    • F N R = F N / ( T P + F N ) FNR = FN / (TP+FN)
  • 查准率 p e r c i s i o n percision
    • 预测为正类的样本中实际为正类的比例
    • p = T P / ( T P + F P ) p = TP / (TP + FP)
  • 召回率 r e c a l l recall
    • 被模型正确预测的正样本比例
    • 高召回意味着,很少将正样本误分为负样本
    • r = T P / ( T P + F N ) r = TP / (TP + FN)

三级指标

F 1 S c o r e F_1 - 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}
  • 精度与召回的调和平均 2 F = 1 r + 1 p \frac{2}{F} = \frac{1}{r} + \frac{1}{p}

其余指标

  • P R P-R 曲线
  • F β = ( β 2 + 1 ) r p r + β 2 p F_\beta = \frac{(\beta^2 + 1)rp}{r + \beta^2 p}

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)
  • T P R TPR 沿 y y 轴绘制, F P R FPR 沿 x x 轴绘制
  • 曲线每一个点对应了不同阈值下的一个模型

C o d e 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)
  • 留一法 ( 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)

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


自助法 ( b o o t s t r a p p i n g ) (bootstrapping)

利用自助采样法为基础

自助法重复 m m 次得到包含 m m 个样本的数据集 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


正则化 ( r e g u l a r i z a t i o n ) (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

常见的惩罚:
L1,L2惩罚。


模型比较

  • t t 检验
    两个学习器 A , B A,B
    k k 折交叉验证下的训练误差为 ϵ 1 A , . . . , ϵ k A ; ϵ 1 B , . . . , ϵ k B \epsilon_1^A,...,\epsilon_k^A;\epsilon_1^B,...,\epsilon_k^B
    如果两个模型性能相同,则有 Δ i = ϵ i A ϵ i B = 0 \Delta_i = \epsilon_i^A - \epsilon_i^B = 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)
  • M c n e m a r Mcnemar 检验
A,B T F
T e 00 e_{00} e 01 e_{01}
F e 10 e_{10} e 11 e_{11}

如果两个算法性能相同,则表现相同,则有 e 01 = e 10 e_{01} = e_{10}
对应的统计量为
τ χ 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)

  • F r i e d m a n   &   N e m e n y i Friedman\ \&\ Nemenyi 检验
    这是一个非参数检验法
    每一个元素为对应的性能排序值,如需哦性能一样,则平分序值
数据集 A B C
D 1 D_1 rank
D 2 D_2
D 3 D_3
D 4 D_4
平均序值

统计量为:

τ χ 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})

k k N N 较大时,服从 χ 2 ( k 1 ) \chi^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
= ( 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]

猜你喜欢

转载自blog.csdn.net/qq_37920823/article/details/90028077
今日推荐