公众号:尤而小屋 作者:Peter 编辑:Peter
大家好,我是Peter~
机器学习分类模型的评价指标是在衡量模型在未知数据集上的性能表现,通常基于混淆矩阵和相关的评价指标。
最近建立了一个分类模型,在选择评价指标的时候进行了对比不同指标之间,同时也查阅了很多的资料和博客,发现了一个问题:
Accuracy是准确率,Precision是精确率;还是说反过来?
当时小编主要参考了一篇博客,阅读量和收藏量非常高(此刻已经不是这个数):
https://blog.csdn.net/seagal890/article/details/105059498
我看到他的文章里面这样写到:
大为吃惊,非常怀疑,个人印象中不是这样的。
再看看其他的文章:
很多文章都是相反的定义。于是我问了ChatGPT:
机器学习分类模型中哪个代表准确度,accuracy 还是Precision?
那如果从英文转中文的翻译角度来看,也是相同的结果:
所以这篇文章真的是误导了5万多人,可能他们自己都不知道吧!!
小编坚持accuracy代表准确率,precision代表精确率。
所以大家看其他博主文章的时候,自己也要多思考一下,说不定小编公众号的文章也有不恰当的地方,欢迎指正。
下面小编就从混淆矩阵开始,给大家详细介绍下机器学习分类模型中的多个评价指标。
开局一张图:
其中,Pos代表Positive,Neg代表Negative。描述4个观点:
那么样本总个数为:$样本总数=TP+FN+FP+TN$
基于混淆矩阵可以计算多个分类的评价指标,下面开始详细介绍:
准确率是最为常用的评价指标,它可以用来表示模型的准确度,即表示为:
$$
准确率=\frac{模型识别正确的样本数量}{样本总数}
$$
在这里模型识别正确包含两个部分:真正类TP(True Positive)和真负类TN(True Negative),也就是说;样本的真实情况和预测情况是完全匹配的(正类刚好预测为正类,负类也刚好预测为负类)。
那么准确率的公式表示为:
$$
Accuracy = \frac{TP+TN}{TP+FN+FP+TN}
$$
一般情形下,准确率越高,表示模型越好。
精确率也称之为查准率。它表示在模型识别为正类的样本中,真正为正类的样本所占的比例。即表示为:
$$
精确率 = \frac{真正为正类的样本数}{模型识别为正类的样本数}
$$
具体解释为:
用公式解释为:
$$
Precision = \frac{TP}{TP+FP}
$$
可以理解Precision为模型判断为正样本的置信概率;一般情形下,精确率越高,表示模型越好。
对比准确率Accuracy和精确率Precision的公式:
如何快速区分准确率和精确率的概念?
准确率:对所有样本判断准确的概率;
精确率:对正类(代表某个类)中判断准确的概率;它会精确到某个具体的类别。
召回率Recall又称之为查全率,它表示模型正确识别出来为正类的数量占总的正类样本数量的比值。可以表示为:
$$
召回率 = \frac{模型识别为正类的数量}{总的正类样本数量}
$$
具体解释为:在实际为正类的样本中
用公式解释为:
$$
Recall = \frac{TP}{TP+FN}
$$
一般情况下,Recall值越高,说明有更多的正样本被预测正确,表示模型的效果越好。
对比精确率Precision(查准率)和召回率Recall(查全率)的公式,可以发现:查准率和查全率是一对互相矛盾的指标,查准率高时,查全率必然会低,因为$FP$和$FN$是负相关的。
对比精确率Accuracy和召回率Recall:
精确率和召回率的着重点是不同的,因此适合的场景也有所不同:
F1_Score被定义为精确率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 }}
$$
最大值为1,最小值为0,该指标越大越好。
上面已介绍:查准率和查全率是一对矛盾的指标,它们单独放在一起会存在冲突,因此产生了平衡$F$分数:$F_\beta_Score$,公式表示为:
$$
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 }}
$$
在$\beta=1$时,$F_{\beta}$就是$F_1$,此时认为精准率和召回率一样重要;
当$\beta>1$,则$F_\beta$认为召回率更为重要;
当$0<\beta<1$,则认为精确率更为重要。
ROC曲线全称为受试者工作特征曲线(Receiver Operating Characteristic Curve),它表示在二分类问题中,将真类判定为真类的概率为真阳性率(TPR),将负类判定为真类的概率为假阳性率(FPR),二者之间的关系。ROC是一个以TPR和FPR为横纵坐标绘制出的曲线:
ROC曲线的横坐标为TPR,公式表示为:
$$
\begin{aligned}
\mathrm{TPR} & =\frac{T P}{T P+F N} \
& =\text { Recall }_{\text {positive }}
\end{aligned}
$$
ROC曲线的纵坐标为FPR,公式表示为:
$$
\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}
$$
AUC(Area Under Curve)值是ROC曲线下方的面积,它可以用来衡量分类模型的性能。下图是来自维基百科对ROC-AUC的解释:
通过对分类阈值$\theta$(默认情况下是0.5,范围是0到1)从大到小或者从小到大排列,就可以得到多组TPR和FPR的取值,在二维坐标系中绘制出来就可以得到一条ROC曲线。
ROC曲线越是接近左上角,表示分类器的性能越好,其真阳性率和假阳性率之间的平衡越好;如果AUC值接近0.5,则表示分类器的性能较差。
敏感度,也称之为真正率,表示预测正确的所有正样本数占实际所有样本数的比例,可以看做是对正类的召回率,可以表示为:
$$
敏感度=\frac{模型识别正确的正样本数}{实际总的正样本数}
$$
其中:
用数学公式表示为:
$$
Sentivity = \frac{TP}{TP+FN}
$$
特异度,也称之为真负率,指的是模型识别正确的所有负样本数占实际总负类样本数量的比值,表示为:
$$
特异度 = \frac{模型识别正确的负样本数}{实际总的负类样本数}
$$
其中:
用数学公式表示为:
$$
Specificity = \frac{TN}{TN+FP}
$$
假正率(FPR,False Positive Rate)也称之为误检率,虚警概率,表示误判为正类的负样本数量占实际所有负类的比例,即:
$$
误检率=\frac{误判为正类的负样本数量}{实际所有负类数量}
$$
其中:
用数学公式表示为:
$$
FPR=\frac{FP}{FP+TN}
$$
可以看到特异度和FPR的关系为:
$$
FPR=1-Specificity
$$
假负类(FNR,False Negative Rate)也称之为漏检率,漏警概率,表示模型误判为负类的正样本数量占实际所有正样本的比例,即:
$$
漏检率=\frac{误判为负类的正样本数量}{实际所有正样本数量}
$$
其中:
用数学公式表示为:
$$
FNR=\frac{FN}{FN+TP}
$$
错误率Error Rate表示模型预测错误的样本数占所有样本数量的比例,即:
$$
错误率=\frac{模型预测错误的样本数}{样本总数}
$$
其中:
用数学公式表示为:
$$
Error_Rate = \frac{FP+FN}{TP+FP+TN+FN}
$$
错误率Error Rate和准确率Accuracy相加之和为1:
$$
Error_Rate=1-Accuracy
$$
$$
Accuracy = \frac{TP+TN}{TP+FN+FP+TN}
$$
过杀率(FDR,False Discorvery Rate)也称之为工业缺陷,表示为模型预测为正类的样本中,负样本所占的比例:
$$
过杀率=\frac{预测为正类中负类的数量}{所有预测为正类的数量}
$$
其中:
用数学公式表示为:
$$
FDR=\frac{FP}{FP+TP}
$$
可以发现过杀率和精确率的和为1:
$$
FDR=1-Precision
$$
$$
Precision = \frac{TP}{TP+FP}
$$
最后借用维基百科的一张图来总结分类模型的不同指标,更加全面:
维基百科:https://en.wikipedia.org/wiki/Confusion_matrix
P-R曲线:https://www.cnblogs.com/guoyaohua/p/classification-metrics.html
ROC-AUC:https://vitalflux.com/roc-curve-auc-python-false-positive-true-positive-rate/
分类算法评价指标详解:https://zhuanlan.zhihu.com/p/110015537
Analytics Yogi:https://vitalflux.com/roc-curve-auc-python-false-positive-true-positive-rate/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。