机器学习--PR曲线, ROC曲线

在机器学习领域,如果把Accuracy作为衡量模型性能好坏的唯一指标,可能会使我们对模型性能产生误解,尤其是当我们模型输出值是一个概率值时,更不适宜只采取Accuracy作为衡量模型性泛化能的指标.这篇博文会为大家介绍两种比较二分决策模型性能的方法PR曲线, ROC曲线

预测概率

对于分类问题我们可以直接预测输入数据的类别,或者我们也可以为测试样本产生一个实值或概率预测,并将这个预测值与一个分类阈值作比较,比如说默认阈值为0.5,那么对于输出概率在[0.0.49]的样本会被预测为负,对于输出概率在 [0.5,1.0]之间的样本会被预测为正.同时我们可以通过更改阈值来调整模型在某个问题上的预测性能.

对于二分类问题,主要有两类错误

  • False Negative(假反例):一个正例被错误的预测为反例
  • False Positive(假正例):一个反例给错误的预测为正例

利用概率预测结果并设置合适的阈值我们就可以在这两种错误之间取得平衡.具体来说我们先根据这个实值或者是概率预测结果对测试样本进行排序,"最可能"是正例的排在最前边或者说最左边,"最不可能"是正例的排在最后边或者说最右边,通过调整阈值在这个排序数组中的位置将样本分为两个部分,阈值左边被预测为正例,阈值右侧被预测为反例.如果我们希望提高模型的查准率/降低假正率,即提高预测为正例的样本里实际结果也为正例的样本的占比,我们就可以把这个阈值向左移;如果我们希望提高模型的查全率/降低假反例,即提高实际为正例的样本中预测结果也为正例的样本的占比,那么我们就可以把这个阈值向左移.

排序本身的好坏体现了综合考虑学习器在一般情况下泛化性能的好坏.ROC则是从这个角度出发来研究学习器泛化性能的有力工具.     --<机器学习> 周志华

 

ROC曲线

什么是ROC

接收器操做特征曲线,也叫ROC曲线,根据wikipedia的解释:

在信号检测理论中,接收者操作特征曲线receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于 (1) 选择最佳的信号侦测模型、舍弃次佳的模型。 (2) 在同一模型中设定最佳阈值。

ROC曲线首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。数十年来,ROC分析被用于医学、无线电、生物学、犯罪心理学领域中,而且最近在机器学习(machine learning)和数据挖掘(data mining)领域也得到了很好的发展。

如何理解ROC

在衡量学习器的泛化性能时,根据学习器的预测结果对样本排序,按此顺序逐个把样本作为正例进行输出,每次计算测试样本的真正率TPR,和假正率FPR并把这两项作为ROC的纵轴和横轴.其中真正率衡量实际值为正例的样本中被正确预测为正例的样本的比例,假正率表示实际值为负例的样本中被错误的预测为正例的样本的比例

                                                

具体来说,假设有一个逻辑回归分类器,根据它的预测结果对样例排序,我们设初始阈值为最大, 此时所有样本都被预测为反例,没有样本被预测为正例即TP = 0, FP = 0, TPR = 0, FPR = 0; 之后我们不断调小阈值,在这个过程中被正确预测为正例的样本和被错误预测为正例的样本都在不断增多 , 同时被正确预测为反例的样本和被错误预测为反例的样本不断减小.因此TPR和FPR会不断变大.当阈值为最小时,所有样本被预测为正,没有样本被预测为负即FN =0, TN = 0, TPR = 1, FPR = 1; 根据这一系列阈值我们可以得到一系列一一对应的真正率和假正率.

     

当上图中的ROC曲线接近于(1,0)点,表明模型泛化性能越好,越接近对角线的时候,表明此时模型的预测结果为随机预测结果.

在实际中ROC曲线没有这么光滑,更多的会接近下图的样子,下图中的橙色曲线上每一个点对应于一个阈值下的真正率和假正率(图片来自网络

      

 

优点

ROC在以下几个方面会很有用

  1. 可以利用ROC曲线对不同模型进行比较,如果一个模型的ROC曲线被另一个模型的曲线完全包住,则可断言后者的性能由于前者
  2. ROC曲线下方的面积(AUC)可以用来作为评估模型模型性能的指标.如当两个模型的ROC曲线发生交叉,则很难说哪一个模型更好,这时候可以用AUC来作为一个比较合理的判据

问题

尽管ROC用处很大但是如果我们的数据中类别分布非常不均衡的时候,ROC就不再适用了.

下图(a)代表ROC曲线图(b)代表PR曲线,图中的曲线都来为同样的模型在一个非均衡测试集上的预测结果.对于ROC曲线来说越靠近左上方表明模型性能越好,图(a)中的ROC曲线表明模型性能非常好;对于PR曲线来说越靠近右上方说明模型性能越好,但是看图(b)中的曲线,很显然这两个模型都还有很大的提升空间.同时从图(a)中我们可以看出两种算法性能接近,都表现优异,但是图(b)中Algorithm2的性能表现要明显优于Algorithm1.

造成这种情况的原因是我们的测试数据集中的反例数目远远多于正例的数目,假设负样本:正样本=1000:10.在这种情况下,当阈值为最大时,真正率和假正率还是都为0,随着我们不断调小阈值真正率和假正率还是在不断提高, 当阈值最小时真正率和假正率达到最大.因此ROC曲线没有很好地体现出样本类别分布不平衡对模型产生的影响,甚至导致对模型性能有错误的解释.这种情况下PR曲线可以给我们提供更精确的参考.

                                                                  

Precision-Recall (PR)

什么是PR曲线

PR曲线常被用在信息提取领域,同时当我们的数据集中类别分布不均衡时我们可以用PR曲线代替ROC.PR曲线的横轴代表查全率,实际上就是真正率,纵轴代表查准率,表示预测为正例的样本里实际也为正例的样本所占的比例.对于查准率和查全率的理解可以参考我的上一篇博文机器学习--如何理解Accuracy, Precision, Recall, F1 score

如何理解PR曲线

与ROC曲线类似,我们根据学习器的预测结果对样例排序,"最可能"是正例的排在最前边或者说最左边,"最不可能"是正例的排在最后边或者说最右边.按此顺序逐个把样本作为正例进行输出,每次计算测试样本的查准率和查全率并把这两项作为PR曲线的纵轴和横轴. 

   

         图片来源于周志华老师的<机器学习>一书.

当PR曲线越靠近右上方时,表明模型性能越好,与ROC曲线类似,在对不同模型进行比较时,若一个模型的PR曲线被另一个模型的PR曲线完全包住则说明后者的性能优于前者.如上图中橘色线代表的模型要优于蓝色线代表的模型,若模型的PR曲线发生了交叉,则无法直接判断哪个模型更好.在周志华老师的机器学习上中提到了可以用平衡点.它是查准率=查全率时的取值,如上图黑色线代表的模型的平衡点要大于橘色线模型代表的平衡点,表明前者优于后者,除此之外更为常用的是F1 score,也就是查准率和查全率的加权平均,F1 = (2*查准率*查全率)/(查准率+查全率)

如何选择

  • ROC曲线:如果我们的测试数据集类别分布大致均衡的时候我们可以用ROC曲线
  • PR曲线:当数据集类别分布非常不均衡的时候采用PR曲线

 

reference The Relationship Between Precision-Recall and ROC Curves

                How to Use ROC Curves and Precision-Recall Curves for Classification in Python

                  <机器学习> 周志华

posted @ 2020-02-29 15:56  老张哈哈哈  阅读(13551)  评论(0编辑  收藏  举报