公众号:尤而小屋
作者:Peter
编辑:Peter
大家好,我是Peter~
机器学习分类模型的评价指标是在衡量模型在未知数据集上的性能表现,通常基于混淆矩阵和相关的评价指标。
最近建立了一个分类模型,在选择评价指标的时候进行了对比不同指标之间,同时也查阅了很多的资料和博客,发现了一个问题:
Accuracy是准确率,Precision是精确率;还是说反过来?
当时小编主要参考了一篇博客,阅读量和收藏量非常高(此刻已经不是这个数):
我看到他的文章里面这样写到:
大为吃惊,非常怀疑,个人印象中不是这样的。
再看看其他的文章:
很多文章都是相反的定义。于是我问了ChatGPT:
机器学习分类模型中哪个代表准确度,accuracy 还是Precision?
那如果从英文转中文的翻译角度来看,也是相同的结果:
所以这篇文章真的是误导了5万多人,可能他们自己都不知道吧!!
小编坚持accuracy代表准确率,precision代表精确率。
所以大家看其他博主文章的时候,自己也要多思考一下,说不定小编公众号的文章也有不恰当的地方,欢迎指正。
下面小编就从混淆矩阵开始,给大家详细介绍下机器学习分类模型中的多个评价指标。
混淆矩阵Confusion Matrix
开局一张图:
其中,Pos代表Positive,Neg代表Negative。描述4个观点:
- True Positive(TP):真正类。样本的真实类别是正类,并且模型识别的结果也是正类。
- False Negative(FN):假负类。样本的真实类别是正类,但模型将其识别为负类。
- False Positive(FP):假正类。样本的真实类别是负类,但模型将其识别为正类。
- True Negative(TN):真负类。样本的真实类别是负类,并且模型将其识别为负类。
那么样本总个数为: <math xmlns="http://www.w3.org/1998/Math/MathML"> 样本总数 = T P + F N + F P + T N 样本总数=TP+FN+FP+TN </math>样本总数=TP+FN+FP+TN
基于混淆矩阵可以计算多个分类的评价指标,下面开始详细介绍:
准确率Accuracy
准确率是最为常用的评价指标,它可以用来表示模型的准确度,即表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 准确率 = 模型识别正确的样本数量 样本总数 准确率=\frac{模型识别正确的样本数量}{样本总数} </math>准确率=样本总数模型识别正确的样本数量
在这里模型识别正确包含两个部分:真正类TP(True Positive)和真负类TN(True Negative),也就是说;样本的真实情况和预测情况是完全匹配的(正类刚好预测为正类,负类也刚好预测为负类)。
那么准确率的公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A c c u r a c y = T P + T N T P + F N + F P + T N Accuracy = \frac{TP+TN}{TP+FN+FP+TN} </math>Accuracy=TP+FN+FP+TNTP+TN
一般情形下,准确率越高,表示模型越好。
精确率Precision
精确率也称之为查准率。它表示在模型识别为正类的样本中,真正为正类的样本所占的比例。即表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 精确率 = 真正为正类的样本数 模型识别为正类的样本数 精确率 = \frac{真正为正类的样本数}{模型识别为正类的样本数} </math>精确率=模型识别为正类的样本数真正为正类的样本数
具体解释为:
- 模型识别为正类包含两个部分:真正类TP(True Positive)和假正类FP(False Positive)
- 真正为正类的样本:只有TP(True Positive)
用公式解释为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} </math>Precision=TP+FPTP
可以理解Precision为模型判断为正样本的置信概率;一般情形下,精确率越高,表示模型越好。
对比准确率Accuracy和精确率Precision的公式:
- 在准确率公式的分子中,包含所有预测准确(真正类+真负类)的数量,分母则是所有样本数量,说明准确率可以表示为在整体样本上的判断;
- 精确率公式的分子只有真正为正类的样本,分母则是模型识别为正类的全部数量,也就是说精确率是模型在某个类别上的判断。
如何快速区分准确率和精确率的概念?
准确率:对所有样本判断准确的概率;
精确率:对正类(代表某个类)中判断准确的概率;它会精确到某个具体的类别。
召回率Recall
召回率Recall又称之为查全率,它表示模型正确识别出来为正类的数量占总的正类样本数量的比值。可以表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 召回率 = 模型识别为正类的数量 总的正类样本数量 召回率 = \frac{模型识别为正类的数量}{总的正类样本数量} </math>召回率=总的正类样本数量模型识别为正类的数量
具体解释为:在实际为正类的样本中
- 模型识别为正类的数量:真正类TP(True Positive)
- 总的正类样本数量:真正类TP(True Positive)和假负类FN(False Negative)
用公式解释为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} </math>Recall=TP+FNTP
一般情况下,Recall值越高,说明有更多的正样本被预测正确,表示模型的效果越好。
对比精确率Precision(查准率)和召回率Recall(查全率)的公式,可以发现:查准率和查全率是一对互相矛盾的指标,查准率高时,查全率必然会低,因为 <math xmlns="http://www.w3.org/1998/Math/MathML"> F P FP </math>FP和 <math xmlns="http://www.w3.org/1998/Math/MathML"> F N FN </math>FN是负相关的。
对比精确率Accuracy和召回率Recall:
精确率和召回率的着重点是不同的,因此适合的场景也有所不同:
-
精确率Precision:主要关注预测为正类的样本中,有多少是真正的正类。在特殊场景,比如医学诊断、法律预测等中,对预测结果的要求是非常高的。假设医学诊断了100人正常不患癌,那真正的正常者有多少人,这个时候就需要谨慎,可能有癌症患者被误判为正常,没有查出他的病,所以我们会关注精确率,否则会有严重后果。
-
召回率Recall:主要关注的是样本中的正类有多少是被正确预测了,在信贷违约、垃圾邮件过滤等特殊场景中常使用。在信贷违约预测中,我们更关注的是坏账违约用户,召回率越高,说明实际坏用户被预测出来的概率越高。有点类似于宁可错杀一千,不可放过一个的味道。
F1_Score
F1_Score被定义为精确率Precision和召回率Recall的调和平均值,公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F 1 _ S c o r e = 2 1 Precision + 1 Recall = 2 ⋅ Precision ⋅ Recall Precision + Recall F1\_Score=\frac{2}{\frac{1}{\text { Precision }}+\frac{1}{\text { Recall }}}=\frac{2 \cdot \text { Precision } \cdot \text { Recall }}{\text { Precision }+ \text { Recall }} </math>F1_Score= Precision 1+ Recall 12= Precision + Recall 2⋅ Precision ⋅ Recall
最大值为1,最小值为0,该指标越大越好。
<math xmlns="http://www.w3.org/1998/Math/MathML"> F β _ S c o r e F_\beta\_Score </math>Fβ_Score
上面已介绍:查准率和查全率是一对矛盾的指标,它们单独放在一起会存在冲突,因此产生了平衡 <math xmlns="http://www.w3.org/1998/Math/MathML"> F F </math>F分数: <math xmlns="http://www.w3.org/1998/Math/MathML"> F β _ S c o r e F_\beta\Score </math>Fβ_Score,公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F β = 1 + β 2 1 Precision + β 2 Recall = ( 1 + β 2 ) ⋅ Precision ⋅ Recall β 2 ⋅ Precision + Recall F\beta=\frac{1+\beta^2}{\frac{1}{\text { Precision }}+\frac{\beta^2}{\text { Recall }}}=\frac{\left(1+\beta^2\right) \cdot \text { Precision } \cdot \text { Recall }}{\beta^2 \cdot \text { Precision }+ \text { Recall }} </math>Fβ= Precision 1+ Recall β21+β2=β2⋅ Precision + Recall (1+β2)⋅ Precision ⋅ Recall
在 <math xmlns="http://www.w3.org/1998/Math/MathML"> β = 1 \beta=1 </math>β=1时, <math xmlns="http://www.w3.org/1998/Math/MathML"> F β F_{\beta} </math>Fβ就是 <math xmlns="http://www.w3.org/1998/Math/MathML"> F 1 F_1 </math>F1,此时认为精准率和召回率一样重要; 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> β > 1 \beta>1 </math>β>1,则 <math xmlns="http://www.w3.org/1998/Math/MathML"> F β F_\beta </math>Fβ认为召回率更为重要;
当 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 < β < 1 0<\beta<1 </math>0<β<1,则认为精确率更为重要。
ROC-AUC
ROC曲线全称为受试者工作特征曲线(Receiver Operating Characteristic Curve),它表示在二分类问题中,将真类判定为真类的概率为真阳性率(TPR),将负类判定为真类的概率为假阳性率(FPR),二者之间的关系。ROC是一个以TPR和FPR为横纵坐标绘制出的曲线:
ROC曲线的横坐标为TPR,公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> T P R = T P T P + F N = Recall positive \begin{aligned} \mathrm{TPR} & =\frac{T P}{T P+F N} \\ & =\text { Recall }_{\text {positive }} \end{aligned} </math>TPR=TP+FNTP= Recall positive
ROC曲线的纵坐标为FPR,公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F P R = F P F P + T N = F P + T N − T N F P + T N = 1 − T N F P + T N = 1 − Recall negative \begin{aligned} \mathrm{FPR} & =\frac{F P}{F P+T N}=\frac{F P+T N-T N}{F P+T N} \\ & =1-\frac{T N}{F P+T N} \\ & =1-\text { Recall }_{\text {negative }} \end{aligned} </math>FPR=FP+TNFP=FP+TNFP+TN−TN=1−FP+TNTN=1− Recall negative
AUC(Area Under Curve)值是ROC曲线下方的面积,它可以用来衡量分类模型的性能。下图是来自维基百科对ROC-AUC的解释:
通过对分类阈值 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ(默认情况下是0.5,范围是0到1)从大到小或者从小到大排列,就可以得到多组TPR和FPR的取值,在二维坐标系中绘制出来就可以得到一条ROC曲线。
ROC曲线越是接近左上角,表示分类器的性能越好,其真阳性率和假阳性率之间的平衡越好;如果AUC值接近0.5,则表示分类器的性能较差。
敏感度Sensitivity
敏感度,也称之为真正率,表示预测正确的所有正样本数占实际所有样本数的比例,可以看做是对正类的召回率,可以表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 敏感度 = 模型识别正确的正样本数 实际总的正样本数 敏感度=\frac{模型识别正确的正样本数}{实际总的正样本数} </math>敏感度=实际总的正样本数模型识别正确的正样本数
其中:
- 模型识别正确的正样本数:真正类TP(True Positive)
- 实际总的正样本数:真正类TP(True Positive)和假负类FN(False Negative)
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> S e n t i v i t y = T P T P + F N Sentivity = \frac{TP}{TP+FN} </math>Sentivity=TP+FNTP
特异度Specificity
特异度,也称之为真负率,指的是模型识别正确的所有负样本数占实际总负类样本数量的比值,表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 特异度 = 模型识别正确的负样本数 实际总的负类样本数 特异度 = \frac{模型识别正确的负样本数}{实际总的负类样本数} </math>特异度=实际总的负类样本数模型识别正确的负样本数
其中:
- 模型识别正确的负样本数:真负类TN(True Negative)
- 实际总的负样本数:真负类TN(True Negative)和假正类FP(False Positive)
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> S p e c i f i c i t y = T N T N + F P Specificity = \frac{TN}{TN+FP} </math>Specificity=TN+FPTN
FPR(False Positive Rate)
假正率(FPR,False Positive Rate)也称之为误检率,虚警概率,表示误判为正类的负样本数量占实际所有负类的比例,即:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 误检率 = 误判为正类的负样本数量 实际所有负类数量 误检率=\frac{误判为正类的负样本数量}{实际所有负类数量} </math>误检率=实际所有负类数量误判为正类的负样本数量
其中:
- 误判为正类的负样本数量:假正类FP(False Positive)
- 实际样本中的所有负类:假正类FP(False Positive)和真负类TN(True Negative)
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F P R = F P F P + T N FPR=\frac{FP}{FP+TN} </math>FPR=FP+TNFP
可以看到特异度和FPR的关系为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F P R = 1 − S p e c i f i c i t y FPR=1-Specificity </math>FPR=1−Specificity
FNR(False Negative Rate)
假负类(FNR,False Negative Rate)也称之为漏检率,漏警概率,表示模型误判为负类的正样本数量占实际所有正样本的比例,即:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 漏检率 = 误判为负类的正样本数量 实际所有正样本数量 漏检率=\frac{误判为负类的正样本数量}{实际所有正样本数量} </math>漏检率=实际所有正样本数量误判为负类的正样本数量
其中:
- 误判为负类的正样本数量:假负类FN(False Negative)
- 实际所有正样本数量:假负类FN(False Negative)和真正类TP(True Positive)
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F N R = F N F N + T P FNR=\frac{FN}{FN+TP} </math>FNR=FN+TPFN
错误率Error Rate
错误率Error Rate表示模型预测错误的样本数占所有样本数量的比例,即:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 错误率 = 模型预测错误的样本数 样本总数 错误率=\frac{模型预测错误的样本数}{样本总数} </math>错误率=样本总数模型预测错误的样本数
其中:
- 模型预测错误的样本数:假正类FP(False Positive)和假负类FN(False Negative)
- 样本总数:TP+FP+TN+FN
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> E r r o r _ R a t e = F P + F N T P + F P + T N + F N Error\_Rate = \frac{FP+FN}{TP+FP+TN+FN} </math>Error_Rate=TP+FP+TN+FNFP+FN
错误率Error Rate和准确率Accuracy相加之和为1:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> E r r o r _ R a t e = 1 − A c c u r a c y Error\_Rate=1-Accuracy </math>Error_Rate=1−Accuracy
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A c c u r a c y = T P + T N T P + F N + F P + T N Accuracy = \frac{TP+TN}{TP+FN+FP+TN} </math>Accuracy=TP+FN+FP+TNTP+TN
过杀率FDR
过杀率(FDR,False Discorvery Rate)也称之为工业缺陷,表示为模型预测为正类的样本中,负样本所占的比例:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 过杀率 = 预测为正类中负类的数量 所有预测为正类的数量 过杀率=\frac{预测为正类中负类的数量}{所有预测为正类的数量} </math>过杀率=所有预测为正类的数量预测为正类中负类的数量
其中:
- 预测为正类中实际为负类的数量:假正类FP(False Positive)
- 所有预测为正类的数量:假正类FP(False Positive)和真正类TP(True Positive)
用数学公式表示为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F D R = F P F P + T P FDR=\frac{FP}{FP+TP} </math>FDR=FP+TPFP
可以发现过杀率和精确率的和为1:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> F D R = 1 − P r e c i s i o n FDR=1-Precision </math>FDR=1−Precision
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} </math>Precision=TP+FPTP
总结
最后借用维基百科的一张图来总结分类模型的不同指标,更加全面:
参考
维基百科:en.wikipedia.org/wiki/Confus...
P-R曲线:www.cnblogs.com/guoyaohua/p...
ROC-AUC:vitalflux.com/roc-curve-a...
分类算法评价指标详解:zhuanlan.zhihu.com/p/110015537
Analytics Yogi:vitalflux.com/roc-curve-a...