文章目录

  • 1、选择合适的模型评估指标的依据
  • 2、混淆矩阵(Confusion Matrix)
    • 2.1 模型整体效果:准确率
    • 2.2 捕捉少数类:精确率(Precision)、召回率(Recall)和F1-score
      • 2.2.1 精准率(Precision)
      • 2.2.2 召回率(Recall)
      • 2.2.3 P-R曲线(Precision Recall Curve)
      • 2.2.4 F1-Score
      • 2.2.5 sklearn中的混淆矩阵
  • 3、ROC、AUC

1、选择合适的模型评估指标的依据

通常在模型训练完之后,我们想要查看模型训练的效果以验证模型的好坏,并根据评估结果来继续调整模型的参数、特征或者算法,以达到满意的结果。在回归算法中评价模型好坏的指标很明确主要有:拟合优度R2R^2R2,均方误差MSEMSEMSE,均方根误差RMSERMSERMSE,以及平均绝对误差MAEMAEMAE。

但是,在分类算法中评估模型效果的指标往往就不那么明确了。分类算法的评估指标多种多样,在诸多的评价指标中,大部分指标只能片面的反应模型的一部分性能,如果不能合理的运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。一般分类算法评价一个模型最简单也是最常用的指标就是准确率(Accuracy),但是在没有任何前提下准准确率(Accuracy)往往不能反映一个模型性能的好坏,例如在不平衡的数据集上,正类样本占总数的95%,负类样本占总数的5%;那么有一个模型把所有样本全部判断为正类,该模型也能达到95%的准确率,但是这个模型没有任何的意义。

因此,对于一个模型,我们需要从不同的方面去判断它的性能。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评价结果;这意味着模型的好坏是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。例如医院中检测病人是否有心脏病的模型,即检测出少数类,那么这个模型的目标是将所有有病的人给检测出来,即使会有许多的误诊也在所不惜(将没病检测为有病);又比如在警察追捕罪犯的模型上,该模型的目标是将罪犯准确的识别出来,而不希望有过多的误判(将正常人认为是罪犯)。

所以不同的任务需求,模型的训练目标不同,因此评价模型性能的指标也会有所差异。

也就是说,单纯地追求捕捉出少数类,就会成本太高,而不顾及少数类,又会无法达成模型的效果。所以在现实中,我们往往在寻找捕获少数类的能力将多数类判错后需要付出的成本的平衡。如果一个模型在能够尽量捕获少数类的情况下,还能够尽量对多数类判断正确,则这个模型就非常优秀了。为了评估这样的能力,我们将引入新的模型评估指标:混淆矩阵和ROC曲线来帮助我们。

2、混淆矩阵(Confusion Matrix)

混淆矩阵是二分类问题的多维衡量指标体系,在样本不平衡时极其有用。在混淆矩阵中,我们将少数类认为是正例多数类认为是负例。在决策树,随机森林这些普通的分类算法里,即是说少数类是1,多数类是0。在SVM里,就是说少数类是1,多数类是-1。普通的混淆矩阵,一般使用{0,1}来表示。如图所示:

预测值
1 0
真实值 1 TP(11) FN(10)
0 FP(01) TN(00)
  1. TP:预测为正样本,实际也为正样本的特征数
  2. FP:预测为正样本,实际为负样本的特征数
  3. TN:预测为负样本,实际也为负样本的特征数
  4. FN:预测为负样本,实际为正样本的特征数

混淆矩阵中,永远是真实值在前,预测值在后。其实可以很容易看出,11和00的对角线就是全部预测正确的,01和10的对角线就是全部预测错误的。基于混淆矩阵,我们有六个不同的模型评估指标,这些评估指标的范围都在[0,1]之间,所有以11和00为分子的指标都是越接近1越好,所以以01和10为分子的指标都是越接近0越好。

2.1 模型整体效果:准确率

准确率是分类问题中最为原始的评价指标,准确率的定义是预测正确的结果占总样本的百分比,通常来说越接近1越好。其公式如下:
Accuracy=TP(11)+TN(00)TP(11)+TN(00)+FP(01)+FN(10)Accuracy = \frac{TP(11)+TN(00)}{TP(11)+TN(00)+FP(01)+FN(10)}Accuracy=TP(11)+TN(00)+FP(01)+FN(10)TP(11)+TN(00)​

但是,准确率评价算法有一个明显的弊端问题,就是在数据的类别不均衡,特别是有极偏的数据存在的情况下,准确率这个评价指标是不能客观评价算法的优劣的。例如下面这个例子:

在测试集里,有100个sample,99个反例,只有1个正例。如果我的模型不分青红皂白对任意一个sample都预测是反例,那么我的模型的准确率就为0.99,从数值上看是非常不错的,但事实上,这样的算法没有任何的预测能力,于是我们就应该考虑是不是评价指标出了问题,这时就需要使用其他的评价指标综合评判了。

2.2 捕捉少数类:精确率(Precision)、召回率(Recall)和F1-score

2.2.1 精准率(Precision)

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

Precision=TP(11)TP(11)+FP(01)Precision = \frac{TP(11)}{TP(11)+FP(01)}Precision=TP(11)+FP(01)TP(11)​

在现实的样本不平衡例子中,当每一次将多数类判断错误的成本非常高昂的时候(比如大众召回车辆的例子,警察追捕罪犯),我们会追求高精确度。精确度越低,我们对多数类的判断就会越错误。当然了,如果我们的目标是不计一切代价捕获少数类,那我们并不在意精确度。

2.2.2 召回率(Recall)

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

Recall=TP(11)TP(11)+FN(10)Recall = \frac{TP(11)}{TP(11)+FN(10)}Recall=TP(11)+FN(10)TP(11)​

如果我们希望不计一切代价,找出少数类(比如找出癌症患者),那我们就会追求高召回率,相反如果我们的目标不是尽量捕获少数类,那我们就不需要在意召回率。

注意召回率和精确度的分子是相同的(都是TP(11)),只是分母不同。而召回率和精确度是此消彼长的,两者之间的平衡代表了捕捉少数类的需求和尽量不要误伤多数类的需求的平衡。究竟要偏向于哪一方,取决于我们的业务需求:究竟是误伤多数类的成本更高,还是无法捕捉少数类的代价更高。

2.2.3 P-R曲线(Precision Recall Curve)

P-R曲线(Precision Recall Curve) 正是描述精确率/召回率变化的曲线,P-R曲线定义如下:对于同一个模型,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。若一个学习器的P-R曲线被另一个学习器完全”包住”,则后者的性能优于前者。当存在交叉时,可以计算曲线围住面积,不太容易判断,但是可以通过平衡点(Break-Even Point,BEP)来判断,当P=R时的取值,平衡点的取值越高,性能更优。。如下图所示:

2.2.4 F1-Score

F1-Score 正如上文所述,Precision和Recall指标有时是此消彼长的,即精准率高了,召回率就下降,在一些场景下要兼顾精准率和召回率,最常见的方法就是F1-Measure,又称F1-Score。F1-Measure是P和R的加权调和平均,即:

F1−score=21Recall+1Precision=2∗Precision∗RecallPrecision+RecallF1-score = \frac{2}{\frac{1}{Recall}+{\frac{1}{Precision}}} = \frac{2*Precision*Recall}{Precision+Recall}F1−score=Recall1​+Precision1​2​=Precision+Recall2∗Precision∗Recall​

2.2.5 sklearn中的混淆矩阵

含义
sklearn.metrics.confusion_matrix 混淆矩阵
sklearn.metrics.accuracy_score 准确率accuracy
sklearn.metrics.precision_score 精确度precision
sklearn.metrics.recall_score 召回率recall
sklearn.metrics.precision_recall_curve 精确度-召回率平衡曲线
sklearn.metrics.f1_score F1-Score

3、ROC、AUC

ROC以及后面要讲到的AUC,是分类任务中非常常用的评价指标,本文将详细阐述。可能有人会有疑问,既然已经这么多评价标准,为什么还要使用ROC和AUC呢?

因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类别不平衡(Class Imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化,ROC以及AUC可以很好的消除样本类别不平衡对指标结果产生的影响。

另一个原因是,ROC和上面做提到的P-R曲线一样,是一种不依赖于阈值(Threshold)的评价指标,在输出为概率分布的分类模型中,如果仅使用准确率、精确率、召回率作为评价指标进行模型对比时,都必须时基于某一个给定阈值的,对于不同的阈值,各模型的Metrics结果也会有所不同,这样就很难得出一个很置信的结果。

在正式介绍ROC之前,我们还要再介绍两个指标,这两个指标的选择使得ROC可以无视样本的不平衡。这两个指标分别是:灵敏度(sensitivity)和特异度(specificity),也叫做真正率(TPR)和假正率(FPR),具体公式如下。

TPR=正样本预测正确数正样本总数=TP(11)TP(11)+FN(10)=RecallTPR = \frac{正样本预测正确数}{正样本总数}= \frac{TP(11)}{TP(11)+FN(10)} = Recall TPR=正样本总数正样本预测正确数​=TP(11)+FN(10)TP(11)​=Recall

FPR=负样本预测错误数负样本总数=FP(01)TN(00)+FP(01)FPR = \frac{负样本预测错误数}{负样本总数} = \frac{FP(01)}{TN(00)+FP(01)}FPR=负样本总数负样本预测错误数​=TN(00)+FP(01)FP(01)​

ROC曲线中的主要两个指标就是真正率TPR和假正率FPR,上面已经解释了这么选择的好处所在。其中横坐标为假正率(FPR),纵坐标为真正率(TPR),下面就是一个标准的ROC曲线图。

以TPR为y轴,以FPR为x轴,我们就直接得到了RoC曲线。从FPR和TPR的定义可以理解,TPR越高,FPR越小,我们的模型和算法就越高效。也就是画出来的RoC曲线越靠近左上越好。如下图左图所示。从几何的角度讲,RoC曲线下方的面积越大越大,则模型越优。所以有时候我们用RoC曲线下的面积,即AUC(Area Under Curve)值来作为算法和模型好坏的标准。

所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好

sklearn中的ROC曲线和AUC面积

在sklearn中,我们有帮助我们计算ROC曲线的横坐标假正率FPR,纵坐标Recall和对应的阈值的类sklearn.metrics.roc_curve。同时,我们还有帮助我们计算AUC面积的类sklearn.metrics.roc_auc_score

sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None
sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

举个例子:

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
area = roc_auc_score(y,clf.decision_function(X))
FPR, recall, thresholds = roc_curve(y,clf.decision_function(X), pos_label=1)plt.figure()
plt.plot(FPR, recall, color='red',label='ROC curve (area = %0.2f)' % area)
plt.plot([0, 1], [0, 1], color='black',linestyle='--')
plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('Recall')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

此外,至于多分类问题以后遇到了再写。

模型评估指标(Confusion Matrix、ROC、AUC)相关推荐

  1. 分类器评估指标——混淆矩阵 ROC AUC KS AR PSI Lift Gain

    目录 1.混淆矩阵 混淆矩阵原理 混淆矩阵的python代码 2.准确率(Accuracy).精确率(Precision).灵敏度(Sensitivity).召回率(Recall).特异度(Speci ...

  2. 模型评估指标 -1- 基础篇 -FPR/TPR/F1/ROC/AUC

    导语:本文是模型评估指标系列的第一篇,将详细地介绍分类模型中基于混淆矩阵衍生出来的各个指标的计算公式,如准确率,精确率,召回率,FPR,TPR,ROC曲线的绘制逻辑,AUC的计算公式等.本文首发在个人 ...

  3. 机器学习 模型评估指标 - ROC曲线和AUC值

    机器学习算法-随机森林初探(1) 随机森林拖了这么久,终于到实战了.先分享很多套用于机器学习的多种癌症表达数据集 https://file.biolab.si/biolab/supp/bi-cance ...

  4. 模型评估指标 AUC 和 ROC,这是我看到的最透彻的讲解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Webbley blog.csdn.net/liweibin ...

  5. SVC模型评估指标与ROC曲线

    目录 1.解决二分类SVC中的样本不均衡问题 1.1 概述 1.2 SVC参数class_weight 1.3 参数class_weight的使用 2.SVC模型评估指标 2.1 混淆矩阵(Confu ...

  6. 模型评估指标:P-R曲线和ROC曲线

    在机器学习建模中,模型评估指标用于评估不同模型的优劣. 在分类任务中,最简单的评估指标莫过于错误率和精度了,错误率表示的是错误分类的样本个数占总样本个数的比例,精度则是1减去错误率. 错误率和精度的优 ...

  7. (8) 支持向量机(下)(模型评估指标、ROC曲线)

    文章目录 1 二分类SVC的进阶 1.1 参数C的理解进阶 1.2 二分类SVC中的样本不均衡问题:重要参数class_weight 2 SVC的模型评估指标 2.1 混淆矩阵 2.1.1 模型整体效 ...

  8. 模型评估指标AUC(area under the curve)

    AUC在机器学习领域中是一种模型评估指标.根据维基百科的定义,AUC(area under the curve)是ROC曲线下的面积.所以,在理解AUC之前,要先了解ROC是什么.而ROC的计算又需要 ...

  9. R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率、抽样ROC的指标并绘制密度图

    R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率.抽样ROC的指标并绘制密度图 目录 R语言使用caret包对GBM模型参数调优(自定义调优的评 ...

最新文章

  1. SAE下修改models里面字段
  2. php trimmsg,c语言实现php的trim标签
  3. C++——赫夫曼编码-译码器(Huffman Coding)
  4. 监视程序中的死锁及其他
  5. 映射网络驱动器后为什么每次都要重新连接_如何映射网络驱动器?
  6. webrtc在远程助手应用的实践
  7. c语言const限制什么,[C语言]类型限定词const解析
  8. Hive大数据-Hive的安装与启动---大数据之Hive工作笔记0005
  9. 正确下载谷歌浏览器Chrome本地安装包 ,能离线安装
  10. SpringBoot2.x 官方墙裂推荐的缓存框架,竟然不是Redis!
  11. Maven入门实战笔记-11节[7-11]
  12. 泰山OFFICE在LINUX上输入法候选框位置错误的两个解决思路
  13. 2022新版WIFI营销微信小程序源码+三级分销
  14. 性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
  15. Blast2GO使用方法详解(命令界面
  16. Python pandas 根据指定条件筛选数据
  17. dw常用标签_dw常用单词
  18. Android识别字符串中的简体和繁体字
  19. 交换机,集线器,路由器这三者如何区分,各自的作用是什么?
  20. 业界新闻: JAVA 7新特性让JVM“瘦身”成功!

热门文章

  1. 三角形面积外接圆内切圆
  2. 双系统安装 小记 历时9小时 过关斩将! Ubuntu19.10 + RUFUS 经验之谈
  3. vue混合html,VueJS混合
  4. el-dialog弹窗偶尔遮罩层全部变黑
  5. android 方块平移动画,Canvas 方块平移动画
  6. mysql 51cto 函数_MySQL入门-8:函数
  7. JavaScript通过队列和双端队列实现击鼓传花游戏
  8. linux 查看u盘挂载目录,Linux下手动挂载U盘
  9. 无线连接服务器会消耗资源么,一秒钟法则:来自腾讯的无线研发经验
  10. 基于cocos2dx,在android的游戏中加入google play game排行榜。