分类模型的评价指标及实现(Python)

本文根据自己对分类模型的评价指标的理解以及其它博主的理解进行总结而成,有疑问或不对地方,请留言指出。

  1. 什么是评价指标?

评价指标:是针对 同份数据不同算法模型 或者 同模型但不同模型参数,而给出这个算法或者参数好坏的定量指标;

常用的评价指标(分类模型):准确率(Accuracy)、精确率(Precision)、召回率(Recall)、P-R曲线(Precision-Recall Curve)、F1 Score、混淆矩阵(Confuse Matrix)、ROC、AUC。

为什么要有这么多度量指标呢?
这是由我们的分类任务的性质所决定的,比如在商品推荐系统中,希望更精准的了解客户需求,避免推送用户不感兴趣的内容, 精确率(Precision)查准率就更加重要;在疾病检测的时候,我们不希望查漏任何一项疾病,这时 查全率就更重要。当两者都需要考虑时,F1度量就是一种参考指标。

注意:评价模型过程中,需要不同的评价指标从不同角度对模型进行全面的评价,在诸多的评价指标中,大部分指标只能片面的反应模型的一部分性能,如果不能合理的运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。

  1. 分类模型的评价指标

2.1 混淆矩阵(Confuse Matrix)

评价指标虽多,但是万变不离其宗,所有的指标其实都是衍生自混淆矩阵中。
混淆矩阵(Confusion Matrix),可以使人们更好地了解分类中的错误。如果矩阵中的非对角元素均为0,就会得到一个完美的分类器。下图的混淆矩阵只针对二分类问题得到的。

分类模型的评价指标及实现(Python)
真正例(True Positive,TP):一个正例被正确预测为正例
真反例(True Negative,TN):一个反例被正确预测为反例
假正例(False Positive,FP):一个反例被错误预测为正例
假反例(False Negative,FN):一个正例被错误预测为反例

; 2.2 准确率(Accuracy)

准确率是 所有样本中预测正确的样本占比,其公式如下:

分类模型的评价指标及实现(Python)
优点:能够判断总的正确率;
缺点:但是在样本不均衡的情况下,并不能作为很好的指标来衡量结果。
案例:比如样本集中,正样本90个,负样本10个,样本是严重不平衡的。对于这种情况,只需要将全部样本预测为正样本,就能够得到90%的准确率,但是完全没有意义。对于新数据,完全体现不出准确率。因此,在样本不平衡的情况下,得到的高准确率没有任何意义,此时准确率就会失效。( 可以使用AUC(AreaUnder roc Curve)值来度量算法好坏,在不平衡数据分类中最常用的指标之一

2.3 精确率(Precision)

精准率(Precision) 又叫 查准率,它是 针对预测结果而言的,它的含义是 在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确,其公式如下:

分类模型的评价指标及实现(Python)
应用场景:比如在商品推荐系统中,希望更精准的了解客户需求,避免推送用户不感兴趣的内容;

; 2.4 召回率(Recall)

召回率(Recall) 又称 查全率,它是 针对原样本而言的,它的含义是 在实际为正的样本中被预测为正样本的概率,其公式如下:

分类模型的评价指标及实现(Python)
精确率与召回率的应用场景: 例如,在预测股票的时候,更关心Precision,即预测升的那些股票里,真的升了有多少,因为那些预测升的股票都是投钱的。而在预测病患的场景下,更关注Recall,即真的患病的那些人里预测错了情况应该越少越好。

Precision和Recall是一对大多数情况下是此消彼长的度量。 例如在推荐系统中,想让推送的内容尽可能用户全都感兴趣,那只能推送把握高的内容,这样就漏掉了一些用户感兴趣的内容Recall就低了( 这里比较迷糊是为什么Recall就降低了呢,比如你预测一个视频内容,用户感兴趣的概率为0.7,你设置概率达到0.8以上才放心将内容推给用户,这样会导致TP降低,FN上升,一定程度上Recall会降低);如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个 (此时,当将不感兴趣的内容越多,FP越大,一定情况下,这样Precision就会降低了)

2.5 F1 Score

Precision和Recal指标大多数情况下是此消彼长的度量,即精准率高了,召回率就下降,在一些场景下要兼顾精准率和召回率,最常见的方法就是F-Measure,又称F-Score。F-Measure是P和R的加权调和平均,即:

分类模型的评价指标及实现(Python)
特别地,当β=1时,也就是常见的F1-Score,是P和R的调和平均,当F1较高时,模型的性能越好:
分类模型的评价指标及实现(Python)
from sklearn.metrics import f1_score, precision_score, recall_score

y_true=[1,2,3]
y_pred=[1,1,3]

f1 = f1_score( y_true, y_pred, average='macro' )
p = precision_score(y_true, y_pred, average='macro')
r = recall_score(y_true, y_pred, average='macro')

print(f1, p, r)

2.6 ROC曲线

ROC的代码

AUC为什么不受样本不平衡的影响?

答:因为, 横轴FPR只关注负样本,与正样本无关; 纵轴TPR只关注正样本,与负样本无关。所以横纵轴都不受正负样本比例影响,积分当然也不受其影响。

AUC为什么能够评估分类模型?

答:AUC的意思是,从数据样本中随机抽取一个正样本和一个负样本,将两个样本通过模型获得正样本得分Score1和负样本得分Score2,Score1大于Score2的概率即为AUC,例如AUC为0.9,则这个概率为90%。通俗的来说:AUC衡量的是ROC曲线下的面积,表示的是分类器能够正确分类正例和负例的概率大小。

AUC的优点:

  1. AUC不受阈值的影响:AUC是基于ROC曲线计算的,不需要设定阈值,能够很好地评估分类器的性能。
  2. AUC对样本不平衡问题不敏感:在样本不平衡的情况下,AUC能够很好地评估分类器的性能,不像准确率等指标容易被主导类别的影响。
  3. AUC具有可比性:不同的分类器AUC值可以进行比较,能够帮助选择更优的分类器。

AUC的缺点:

  1. AUC不能反映分类器的具体分类效果:虽然AUC能够评估分类器的性能,但不能反映分类器对不同类别的分类效果,如混淆矩阵能够反映分类器的不同分类效果。
  2. AUC不能处理多分类问题:AUC只能处理二分类问题,对于多分类问题需要采用其他指标。
  3. AUC的计算复杂度较高:AUC的计算需要绘制ROC曲线并计算其下面积,计算复杂度较高,尤其是数据量较大时。

参考

https://www.cnblogs.com/guoyaohua/p/classification-metrics.html
https://baijiahao.baidu.com/s?id=1682575810834946835&wfr=spider&for=pc
https://zhuanlan.zhihu.com/p/258596465
https://www.cnblogs.com/guoyaohua/p/classification-metrics.html
https://www.cnblogs.com/guoyaohua/p/classification-metrics.html
https://zhuanlan.zhihu.com/p/431849072

Original: https://blog.csdn.net/A496608119/article/details/123360837
Author: 莱维贝贝、
Title: 分类模型的评价指标及实现(Python)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/662583/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球