当前位置:   article > 正文

算法模型评价详解:confusion matrix Accuracy Precision Recall F1 调和平均 加权F1 Micro-F1 Macro-F1 PRC ROC AUC_加权f1度量

加权f1度量

目录

问题定义

confusion matrix

Accuracy

Precision和Recall和PRC

F1和调和平均

加权F1

Micro-F1和Macro-F1

ROC和AUC

PRC对比ROC

 

 


 

问题定义

我们从简单到难,先定义任务为二分类,后面再推广到多分类就顺水推舟了。问题定义:

confusion matrix

模型实际预测结果
预测为Positive的样本数预测为Negative的样本数
待预测样本的真实标签总数P:PositiveTP:True PositiveFN:False Negative
N:NegativeFP:False PositiveTN:True Negative

 

  • 需预测的样本有两种标签:阳性Positive,或阴性Negative
  • 这些样本中真实标签为Positive的有P条
  • 真实标签为Negative的有N条
  • P条Positive样本有TP条被正确预测为Positive,即预测正确了,是真的Positive,
  • P条Positive样本有FN条被错误预测为Negative,即被预测错误了,是假的Negative,
  • N条Negative样本,有FP条被错误预测为Positive
  • N条Negative样本,有TN条被正确预测为Negative

上图表格也叫混淆矩阵confusion matrix,反应了模型对标签预测结果的混淆程度。

Accuracy

Accuracy=\frac{TP+TN}{P+N}

Accuracy:准确率,为预测正确的样本数除以预测总数,表示有多少比例的样本预测正确了。

缺点:

  • 因为分母是样本总数,所以当样本中阳性或阴性占比差距很大,即样本分布不均衡时,Accuracy偏向于占比大的那一类别,如阳性样本占 99%,只要分类器将所有样本都预测为阳性样本就能获得 99% 的准确率。
  • 反应的是整体准确率,结果太笼统,实际应用中,我们可能更加关注某一类别样本的情况。比如搜索时会关心 “检索出的信息有多少是用户感兴趣的”,“用户感兴趣的信息有多少被检测出来了” 等等。

相对应的还有错误率:

Error=\frac{FP+FN}{P+N}

代码:

  1. from sklearn.metrics import accuracy_score
  2. y_pred = [0, 0, 1, 1]
  3. y_true = [1, 0, 1, 0]
  4. accuracy_score(y_true, y_pred) # 结果为0.5

Precision和Recall和PRC

Precision=\frac{TP}{TP+FP}

Precision:查准率,也叫精准率或精确率,即所有预测为阳性的结果中,预测正确的(为真正例)比例。代表了阳性结果的预测准确率。

 

Recall=\frac{TP}{TP+FN}=\frac{TP}{P}

Recall:查全率,也叫召回率,即正确预测为阳性的样本数占到了真阳性样本数的比例。代表了有多少比例的真阳性被找出来了。

 

PRC:precision recall curve,横轴是召回率Recall,纵轴是精确率Precision。曲线上的点代表在某阈值下,模型将大于该阈值的结果判定为正样本,小于阈值的结果判定为负样本,此时对应的召回率和精确率。曲线是通过将阈值从高到低移动生成的。

两个模型性能的比较:

  • 如果一个模型的p-r曲线能被另一个模型的曲线包住,则后者的性能优于前者
  • 如果两模型曲线相交,比较曲线下面积,在一定程度上表征学习器的两个值“双高”的比例
  • 曲线下面积不容易计算,可以用“平衡点”度量(查准率=查全率的点)

 

F1和调和平均

 

F1-Score:F1分数,又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。

F1实际为Precision和Recall的调和平均(harmonic mean)

F_1=\frac{1}{(1/Precision+1/Recall)/2}=\frac{2}{1/Precision+1/Recall)}=2\frac{Precision*Recall}{Precision+Recall}

 

调和平均(harmonic mean)H为:所有数字先取倒数,再算平均数,得到平均数后再取倒数,把数又倒回来。

H=\frac{1}{(1/x_1+1/x_2+...+1/x_n)/n}=\frac{n}{1/x_1+1/x_2+...+1/x_n}

举例:1,4,4的H为:

H=\frac{1}{(1/1+1/4+1/4)/3}=\frac{3}{1/1+1/4+1/4}=3\frac{4}{4+1+1}=2

注意,因为0不存在倒数,所以调和平均数不适用于包含0的一组数字。

 

调和平均数,强调了较小值的重要性,给予较小值更高的权重。

举个通俗点的例子。小明数学得了80分,语文得了100分;小红数学90分,语文90分。评价谁考的更好?

直接算平均:小明,(80+100)/2 = 90      小红,(90+90)/2=90,这时两者一样好

但从不偏科的角度来看,是小红更好。

用调和平均值计算:小明,2/(1/80+1/100)=88.89 ;小红,2/(1/90+1/90) = 90。

所以,调和平均值比平均值更加“平均”。

电阻并联:电阻A和B并联,这时电流有两个选择,经过电阻A或经过电阻B,这两个路径是平行的,由于较小电阻对电流影响更大,所以用调和平均才是两者的并联电阻。

为什么F1使用调和平均数,而不是算术平均数?

在你训练的机器学习模型过程中,你往往希望能够兼顾精确率召回率,并使用一个统一的单值评价指标来评价你的机器学习模型的训练效果。我们之所以使用调和平均而不是算术平均,是因为在算术平均中,任何一方对数值增长的贡献相当,任何一方对数值下降的责任也相当;而调和平均在增长的时候会偏袒较小值,也会惩罚精确率召回率相差巨大的极端情况,很好地兼顾了精确率召回率

当R 接近于1, P 接近于 0 时。采用调和平均数的F1值接近于0;而如果采用算数平均数F1的值为0.5;显然采用调和平均数能更好的评估算法的性能。等效于评价R和P的整体效果。

 

梯度贡献视角分析:

å¨è¿éæå¥å¾çæè¿°

对函数f(x,y)=\frac{2xy}{x+y},其图象关于平面x=y对称。分别求f ( x , y ) 对x 和y的偏导数:

\frac{\partial f(x,y)}{\partial x}=\frac{2y^2}{(x+y)^2}

\frac{\partial f(x,y)}{\partial y}=\frac{2x^2}{(x+y)^2}

当x < y 时,\frac{\partial f(x,y)}{\partial x}>\frac{\partial f(x,y)}{\partial y},梯度grad z在x方向增长比y方向快。

当y  > x 时,\frac{\partial f(x,y)}{\partial y}>\frac{\partial f(x,y)}{\partial x},梯度grad z在y方向增长比x方向快。

调和平均在增长的时候会偏袒较小值。

 

 

加权F1

 

F-Score = (1 + \beta ^{2}) \cdot \frac{Precision \cdot Recall}{\beta ^{2}\cdot Precision + Recall}

β 可以用来给召回率和精度更多或者更少的权重。

当 \beta =1时,成为F1-Score,这时召回率和精确率都很重要,权重相同。

当有些情况下我们认为精确率更为重要,那就调整 β 的值小于 1 ,如果我们认为召回率更加重要,那就调整 β的值大于1,比如F2-Score。

 

G分数是另一种统一精确率和的召回率系统性能评估标准,G分数被定义为召回率和精确率的几何平均数。
在这里插入图片描述

 

 

Micro-F1和Macro-F1

最后看Micro-F1和Macro-F1。

在一个多标签分类任务中,可以对每个“类”,计算F1,显然我们需要把所有类的F1合并起来考虑。

这里有两种合并方式:

第一种Micro-F1:先计算出每个类别的Precision和Recall,得到多个Precision和Recall,基于他们直接算F1。

第二种Macro-F1:先计算出每个类别的Precision和Recall,再对每个类别对应的这组Precision和Recall,计算F1,得到多个F1,再算他们的平均。

 

 

ROC和AUC

TPR=\frac{TP}{TP+FN}=\frac{TP}{P}

  • 真阳率(True Positive Rate,TPR),表示预测为阳性而且预测对了,它真的为阳性的样本数,占真实阳性样本总数的比例。或者说,所有真阳性中,模型正确预测为阳性样本的比例,等同于召回率Recall。

FPR=\frac{FP}{TN+FP}=\frac{FP}{N}

  • 假阳率(False Positive Rate,FPR),表示预测为阳性而且预测错了,它实际为阴性的样本数,占真实阴性样本总数的比例: 或者说,所有真阴性中,模型模型错误地将其预测为阳性样本的比例。

     

ROC(Receiver Operating Characteristic):假阳率FPR为横坐标,真阳率TPR为纵坐标,因为真假阳率的分母都是不变的,当确定一个判定阳性的阈值时,就可以基于该阈值,确定预测结果中真阳样本数和假阳样本数,即确定一组(FPR,TPR),得到一个坐标点 (FPR,TPR)。

将阈值从0不但增大,可以得到一系列的坐标点,他们可以连线,画出来如下。红线是随机乱猜模型的ROC曲线,如果模型的ROC越靠左上角,分类器越佳。 

ROCæ²çº¿

 

 

AUC(Area Under Curve)就是ROC曲线下的面积。 

两模型的比较:

  • 若一个模型的ROC把另一模型的ROC包住,前者的性能优于后者
  • 若曲线相交,比较曲线下面积

 

  1. >>> import numpy as np
  2. >>> from sklearn.metrics import roc_auc_score
  3. >>> y_true = np.array([0, 0, 1, 1])
  4. >>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
  5. >>> roc_auc_score(y_true, y_scores)
  6. 0.75

 

PRC对比ROC

与 PRC相比,ROC 曲线有一个特点:当正负样本的分布发生变化时,ROC 曲线形状能基本保持不变,而 P-R 曲线的形状一般会发生比较剧烈的变化。因此,当数据不均匀时,ROC 曲线更能够反映模型好坏。而这背后的原因是:

Precision=\frac{TP}{TP+FP}

Recall=\frac{TP}{TP+FN}=\frac{TP}{P}

TPR=\frac{TP}{TP+FN}=\frac{TP}{P}

FPR=\frac{FP}{TN+FP}=\frac{FP}{N}

  • P-R 曲线关注的是真实的正例总数中实际预测对的比例,以及预测为正例的总数中,实际预测对的比例。即只关心下面红色部分

P:PositiveTP:True PositiveFN:False Negative
N:NegativeFP:False PositiveTN:True Negative

 

 

  • ROC 曲线关注的是真实的正例和负例中(分别对应 TPR 和 FPR),被预测为正例的比例。即关心了四个部分。

P:PositiveTP:True PositiveFN:False Negative
N:NegativeFP:False PositiveTN:True Negative

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/953529
推荐阅读
相关标签
  

闽ICP备14008679号