百面机器学习 #2 模型评估:01&02 精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线

文章目录

  • 1. P-R(Precision-Recall)曲线
    • F1 score
  • 2. 平方根误差的局限性
  • 3. ROC曲线
    • ROC曲线绘制
  • 4. AUC

predict Positive predict Negative
real Positive TP FN num of real positive= n p n_p np
real Negative FP TN num of real negative= n n n_n nn
predicted num of postitive predicted num of negative
  • 精确率(查准率) = 分类正确的正样本个数占分类器判定为正样本的样本个数的比例。
    p = T P T P + F P p=\frac{TP}{TP+FP} p=TP+FPTP

  • 召回率(查全率) = 分类正确的正样本个数占真正的正样本个数的比例。
    r = T P T P + F N = T P n p r=\frac{TP}{TP+FN}= \frac{TP}{n_p} r=TP+FNTP=npTP

Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。

1. P-R(Precision-Recall)曲线

  • P-R曲线的横轴是召回率R,纵轴是精确率P

  • P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本(即高分为正样本,相当于排序,得分前几名为正样本,或者说是我们想要的搜索结果),此时返回结果对应的召回率和精确率。

    左边曲线起始附近代表当阈值最大时模型的精确率和召回率。越往右表示阈值越小。

    • 即开始阈值很大,判定结果可能几乎没有正样本,即无论正负都判定为负, T P → 0 , F P = 0 , T N → n n , F N → n p TP\rightarrow 0, FP=0,TN\rightarrow n_n,FN\rightarrow n_p TP0,FP=0,TNnn,FNnp r = T P T P + F N → 0 , p = T P T P + F P → 1 r=\frac{TP}{TP+FN} \rightarrow 0,p=\frac{TP}{TP+FP}\rightarrow 1 r=TP+FNTP0,p=TP+FPTP1,所以召回率趋近于0,而准确率因为判定为正样本的个数为0、正确判断为正样本的个数也为0,或者说对于正样本的确定“锱铢必较”,只有预测数值特别高的才认为是正样本,这样的高要求得到的正样本是真的正样本的概率就会趋近于1,所以准确率趋近于1;

    • 而当曲线往右走,阈值很小,即对于正样本的判定要求变得很松,几乎将所有的判定为正样本, T P = n p , F P → n n , T N → 0 , F N = 0 TP= n_p, FP\rightarrow n_n,TN\rightarrow 0,FN=0 TP=np,FPnn,TN0,FN=0 r = T P T P + F N = 1 , p = T P T P + F P → n P n p + n n r=\frac{TP}{TP+FN} =1,p=\frac{TP}{TP+FP}\rightarrow \frac{n_P}{n_p+n_n} r=TP+FNTP=1,p=TP+FPTPnp+nnnP则此时就可能将所有的真正样本都挖掘出来,召回率趋近于1;而由于所有样本都判定为正样本,准确率则相当于是原始样本中真实正样本的比例。

百面机器学习 #2 模型评估:01&02 精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线_第1张图片

只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估。

F1 score

精准率和召回率的调和平均值
F 1 = 2 × p r e c i s i o n × r e c a l l p r e c i s i o n + r e c a l l F1=\frac{2\times precision\times recall}{precision+recall} F1=precision+recall2×precision×recall

2. 平方根误差的局限性

RMSE经常被用来衡量回归模型的好坏
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n RMSE = \sqrt{\frac{\sum\limits_{i=1}^n(y_i-\hat y_i)^2}{n}} RMSE=ni=1n(yiy^i)2
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。

离群点:

  • 认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉

  • 如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去

  • 找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE)
    M A P E = ∑ i = 1 n ∣ y i − y ^ i y i ∣ × 100 n MAPE=\sum_{i=1}^n\left|\frac{y_i-\hat y_i}{y_i}\right|\times\frac{100}{n} MAPE=i=1nyiyiy^i×n100
    MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

3. ROC曲线

Receiver Operating Characteristic Curve/ 受试者工作特征曲线”:相比precision、recall、F1 score、P-R曲线等,ROC曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。

predict Positive predict Negative
real Positive TP FN num of real positive= n p n_p np
real Negative FP TN num of real negative= n n n_n nn
predicted num of postitive predicted num of negative
  • 横坐标 = 假阳性率(False Positive Rate,FPR):真的负样本中被分类器预测为正样本的比例。
    F P R = F P T N + F P = F P n n FPR=\frac{FP}{TN+FP}=\frac{FP}{n_n} FPR=TN+FPFP=nnFP

    所有敌机来袭的事件中,每个雷达兵准确预报的概率

  • 纵坐标 = 真阳性率(True Positive Rate,TPR):真的正样本中被分类器预测为正样本的比例。(=召回率)
    T P R = T P T P + F N = T P n p = r e c a l l TPR=\frac{TP}{TP+FN} =\frac{TP}{n_p}=recall TPR=TP+FNTP=npTP=recall

    所有非敌机来袭信号中,雷达兵预报错误成有敌机的概率

ROC曲线绘制

  • ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。“截断点”指的就是区分正负预测结果的阈值。

    左边曲线起始附近代表当阈值最大,越往右表示阈值越小。

    • 即开始阈值很大,判定结果可能几乎没有正样本,即无论正负都判定为负, T P → 0 , F P = 0 , T N → n n , F N → n p TP\rightarrow 0, FP=0,TN\rightarrow n_n,FN\rightarrow n_p TP0,FP=0,TNnn,FNnp F P R = F P T N + F P = 0 , T P R = T P T P + F N → 0 FPR=\frac{FP}{TN+FP}=0,TPR=\frac{TP}{TP+FN}\rightarrow 0 FPR=TN+FPFP=0,TPR=TP+FNTP0,即此时真、假阳性率都趋近0.

    • 而当曲线往右走,阈值很小,即对于正样本的判定要求变得很松,几乎将所有的判定为正样本, T P = n p , F P → n n , T N → 0 , F N = 0 TP= n_p, FP\rightarrow n_n,TN\rightarrow 0,FN=0 TP=np,FPnn,TN0,FN=0 F P R = F P T N + F P → 1 , T P R = T P T P + F N = 1 FPR=\frac{FP}{TN+FP}\rightarrow 1,TPR=\frac{TP}{TP+FN}=1 FPR=TN+FPFP1,TPR=TP+FNTP=1,即此时真实负样本中被分为阳性的比例为1,真实负样本中被分为阳性的比例也为1.

百面机器学习 #2 模型评估:01&02 精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线_第2张图片

  • 还有一种更直观地绘制ROC曲线的方法

    • 首先,根据样本标签统计出正负样本的数量,假设正样本数量为 n p n_p np,负样本数量为 n n n_n nn
    • 接下来,把横轴的刻度间隔设置为 1 / n n 1/n_n 1/nn,纵轴的刻度间隔设置为 1 / n p 1/n_p 1/np
    • 再根据模型输出的预测概率对样本进行排序(从高到低,相当于阈值从最高开始往下走,即是对应曲线最左端开始);依次遍历样本,同时从零点开始绘制ROC曲线
      • 每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线
      • 每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线
      • 直到遍历完所有样本,曲线最终停在(1,1)这个点,表示遍历了所有 n p n_p np个正样本和所有 n n n_n nn个负样本,整个ROC曲线绘制完成
  • 相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。所以ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能

    ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等正负样本数量往往很不均衡领域。

4. AUC

  • AUC((Area Under ROC Curve)指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。

  • 由于ROC曲线一般都处于 y = x y=x y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。

    横纵坐标都表示预测为阳性(正例),而我们希望真实正样本被预测为阳性的概率,高于真实负样本被预测为阳性的概率,所以大部分ROC曲线 y > x y>x y>x.

  • AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

  • AUC常常被用来作为模型排序好坏的指标,原因在于AUC可以看做随机从正负样本中选取一对正负样本,其中正样本的得分大于负样本的概率 !

Ref:

链接:AUC的证明

对于真正例率TPR,分子是得分>t里面正样本的数目,分母是总的正样本数目。 而对于假正例率FPR,分子是得分>t里面负样本的数目,分母是总的负样本数目。 因此,如果定义N+(t),N−(t)N+(t),N−(t)分别为得分大于t的样本中正负样本数目,N+,N−N+,N−为总的正负样本数目, 那么TPR和FPR可以表达为阈值t的函数
TPR ( t ) = N + ( t ) N + FPR ( t ) = N − ( t ) N − \text{TPR}(t) = \frac{N_+(t)}{N_+} \\ \text{FPR}(t) = \frac{N_-(t)}{N_-} TPR(t)=N+N+(t)FPR(t)=NN(t)
考虑随机取得这对正负样本中,负样本得分在 [ t , t + Δ t ] [t,t+Δt] [t,t+Δt]之间的概率为
P ( t ≤ s − < t + Δ t ) = P ( s − > t ) − P ( s − > t + Δ t ) = N − ( t ) − N − ( t + Δ t ) N − = x ( t ) − x ( t + Δ t ) = − Δ x ( t ) P(t \le s_- < t+\Delta t) \\ = P( s_- \gt t) - P(s_- > t+\Delta t) \\ = \frac{N_-(t) - N_-(t+\Delta t)}{N_-} \\ = x(t) - x(t +\Delta t) = - \Delta x(t) P(ts<t+Δt)=P(s>t)P(s>t+Δt)=NN(t)N(t+Δt)=x(t)x(t+Δt)=Δx(t)
如果 Δ t \Delta t Δt很小,那么该正样本得分大于该负样本的概率为
P ( s + > s − ∣ t ≤ s − < t + Δ t ) ≈ P ( s + > t ) = N + ( t ) N + = y ( t ) P(s_+ > s_- | t \le s_- < t+\Delta t) \\ \approx P(s_+ > t) = \frac{N_+(t)}{N_+} = y(t) P(s+>sts<t+Δt)P(s+>t)=N+N+(t)=y(t)
所以
P ( s + > s − ) = ∑ P ( t ≤ s − < t + Δ t ) P ( s + > s − ∣ t ≤ s − < t + Δ t ) = − ∑ y ( t ) Δ x ( t ) = − ∫ t = − ∞ ∞ y ( t ) d x ( t ) = ∫ t = ∞ − ∞ y ( t ) d x ( t ) P(s_+ > s_- ) \\ = \sum P(t \le s_- < t+\Delta t) P(s_+ > s_- | t \le s_- < t+\Delta t) \\ = -\sum y(t) \Delta x(t) \\ = -\int_{t=-\infty}^{\infty} y(t) d x(t) \\ = \int_{t=\infty}^{-\infty} y(t) d x(t) P(s+>s)=P(ts<t+Δt)P(s+>sts<t+Δt)=y(t)Δx(t)=t=y(t)dx(t)=t=y(t)dx(t)
注意积分区间, t = − ∞ t=−\infty t=对应ROC图像最右上角的点,而 t = ∞ t=\infty t=对应ROC图像最左下角的点。所以,计算面积是 ∫ t = ∞ − ∞ \int _{t=\infty}^{-\infty} t=。 可以看出,积分项里面实际上是这样一个事件的概率:随机取一对正负样本,负样本得分为t且正样本得分大于t! 因此,对这个概率微元积分就可以到正样本得分大于负样本的概率!

你可能感兴趣的:(机器学习,百面机器学习,机器学习)