当前位置:   article > 正文

机器学习分类器评价指标详解(Precision, Recall, PR, ROC, AUC等)(二)_procrc分类器

procrc分类器

为了系统性地理解机器学习模型的不同评价指标及其之间的关系,我们将从其定义出发,探究其物理含义及彼此之间的联系,并从数学上给出相应的公式推导,以方便后续用到时复习理解。由于篇幅较长,因此将其分为两篇,这是第二部分,第一部分参见:机器学习分类器评价指标详解(Precision, Recall, PR, ROC, AUC等)(一)

书接上回。

6. AUC

、如果我们想比较两个ROC曲线的好坏,如图5中所示的两个分类器A,B, 曲线A整体位于B的里面,所以可以说B的分类效果优于A。但是若两个分类器的 ROC 曲线发生交叉,而又很难看出谁在谁的左上方,则难以概括性地断言两者孰优孰劣。此时如果一定要进行比较, 则较为合理的判据是比较 ROC 曲线下的面积,即 AUC (Area Under ROC Curve), 也即是图5中的阴影部分。面积越大表示性能越好。

 图5

从定义可知, AUC 可通过对 ROC 曲线下各部分的面积求和而得。假定 ROC 曲线是由坐标为 {(x1,y1), (x2,y2) ,. . ., (xm,ym)} 的点按序连接而形成(X1 =0, xm = 1) ,参见图6,

 图6

则 AUC 可估算为

AUC = \frac{1}{2}\sum\limits_{i = 1}^{m - 1} {\left( {​{x_{i + 1}} - {x_i}} \right)\left( {​{y_{i + 1}} + {y_i}} \right)}

以上是AUC比较直观的解释,其实AUC有着更为深刻的概率含义:它表示的是从样本中任意选择一个正样本和一个负样本,分类器预测正样本为正类的概率大于将负样本预测为正样本的概率的能力。

下面我们进行严格的数学证明

我们假设正类用class 1表示,负类使用class 0 表示。

假设用x表示样本,分类器给出的得分概率为

\hat p\left( x \right) \in \left[ {0,1} \right]

也即是将x分为正类的概率,给定一个阈值t \in \left[ {0,1} \right],

按照大于阈值分为正类,小于阈值分为负类,即可得到一次分类结果,那么就可以计算TPR与FPR,实际上二者可以分别用概率来表示

TPR(等同于recall, sensitivity)可以表示成条件概率

T\left( t \right) = P\left( {\hat p\left( x \right) > t|y\left( x \right) = 1} \right)

 {x}'表示x是负类样本,为了与正类样本看起来所有区别。也即,TPR与FPR都是t的函数,同时,TPR也是FPR的函数。

需要注意的是,虽然ROC曲线看上去是单调递增的,但是T\left( t \right)F\left( t \right)却都是随着t的增大而单调非增的,因为随着阈值的增大,TPR和FPR都会减小。而且我们计算ROC曲线时是从最大的阈值开始计算的,也即是t从1到0的顺序计算,因此,我们可以把AUC表示为

\begin{array}{l} AUC = \int\limits_1^0 {T\left( t \right)dF\left( t \right)} \\ {\rm{ }} = - \int\limits_0^1 {T\left( t \right)} dF\left( t \right)\\ {\rm{ }} = - \int\limits_0^1 {P\left( {\hat p\left( x \right) > t|y\left( x \right) = 1} \right)} dF\left( t \right) \end{array}    

又因为

F(t)=P(\hat{p}({x}')>t|y({x}')=0) =1-P(\hat{p}({x}')\leqslant t|y({x}')=0)

P(\hat{p}({x}')\leqslant t|y({x}')=0)可以看成是离散型条件概率密度函数\hat{p}({x}'=u|y({x}')=0)的累积分布函数,其中u可以取遍t的所有值;故而P(\hat{p}({x}')\leqslant t|y({x}')=0)可以表示为

P(\hat{p}({x}')\leqslant t|y({x}')=0)=\int\limits_0^t {\left( {\hat{p}({​{​{x}'}}) = u|y( {​{​{x}'}}) = 0} \right)du}

由变上限积分函数求导规则可知,

\int\limits_0^t {\left( {\hat{p}({​{​{x}'}}) = u|y( {​{​{x}'}}) = 0} \right)du}

t求导可得

\frac{​{d\int\limits_0^t {( {\hat{p}({x}') = u|y({x}') = 0} )du} }}{​{dt}} = P( {\hat{p}({x}') = t|y({x}') = 0} )

结合

F(t)=1-P(\hat{p}({x}')\leqslant t|y({x}')=0),可知

\begin{array}{l} \frac{​{dF\left( t \right)}}{​{dt}} = 0 - \frac{​{dP\left( {\hat{p}\left( {x}' \right) \le t|y\left( {x}' \right) = 0} \right)}}{​{dt}}\\ {\rm{ }} = - P\left({\hat{p}\left( {x}' \right) = t|y\left( {x}' \right) = 0} \right) \end{array}

将其带入AUC的公式可得

\begin{array}{l} AUC = \int\limits_1^0 {T\left( t \right)dF\left( t \right)} \\ {\rm{ }} = - \int\limits_0^1 {T\left( t \right)} dF\left( t \right)\\ {\rm{ }} = - \int\limits_0^1 {P\left( {\hat{p}\left( x \right) > t|y\left( x \right) = 1} \right)} dF\left( t \right)\\ {\rm{ }} = - \int\limits_0^1 {P\left( {\hat{p}\left( x \right) > t|y\left( x \right) = 1} \right)\left( { - P\left( {\hat{p}\left({x}' \right) = t|y\left( {x}' \right) = 0} \right)dt} \right)} \\ {\rm{ }} = \int\limits_0^1 {P\left( {\hat{p}\left( x \right) > t|y\left( x \right) = 1} \right)P\left( {\hat{p}\left( {x}' \right) = t|y\left({x}'\right) = 0} \right)dt} \\ {\rm{ }} = P\left( {\hat{p}\left( x \right) > \hat{p}\left( {x}' \right)|y\left( x \right) = 1\& y\left( {x}' \right) = 0} \right) \end{array}

P\left( {\hat{p}\left( x \right) > \hat{p}\left( {x}' \right)|y\left( x \right) = 1\& y\left( {x}' \right) = 0} \right)

即是表示,从样本中取出一对正负样本(x,{x}'), 正类样本的得分高于负类样本的概率(得分即表示分类器将样本分为正类的概率)。

如果按照得分从高到低的顺序排列,也可以说,AUC表示从样本中取出的样本对,分类器将正类样本排在负类样本前面的概率。

由此我们也可以得到计算AUC的另外一种更加严谨的计算方法(相比于粗糙地近似计算ROC曲线下的面积),在离散情况下,一般我们是用频率代替概率,而且样本量越大,这种近似越准。所以我们可以使用以下算法计算AUC,加入有M个正样本,N个负样本,那么它们将组成M*N个类似(x,{x}')的正负样本对,我们只要统计这些样本对中,正样本的得分概率大于负样本的得分,即在样本对(x,{x}')中,\hat{p}(x) > \hat{p}({x}')的样本对个数,占总样本对MN的比例即是AUC的值。特殊情况是当正负样本的得分相同时,我们记半个数。

这也对应着参考文献[2]周志华《机器学习》中的公式2.21和2.22,如下图

 可以使用以下代码表示上述过程

这种计算方法要比计算ROC曲线下的面积要更加准确一些,也更有统计意义一些。

以上就是ROC曲线的AUC的统计意义。

其在医疗领域也有很好的应用,以下这个帖子阐述的非常好

Do machines actually beat doctors? ROC curves and performance metrics – Lauren Oakden-Rayner

 了解了ROC曲线下的面积的意义,我们不禁会问PR曲线下的面积又表示什么意思呢?

实际上,PR曲线下的面积为精度precision的期望(加权平均)。具体阐述如下

对于二分类问题,对每个数据点生成一个score ,然后设置一个threshold c,当score >c时输出标签1(正类)。

令随机变量X,Y分别表示真实标签为0,1的score,那么二分类问题是两个概率密度函数(pX(x), pY(y))组成的混合模型,我们已知,给定阈值c有,

precision(c) = \frac{​{TP}}{​{TP + FP}}

Recall(c) = \frac{​{TP}}{​{TP + FN}} = P(Y > c)

由PR曲线,纵轴为Precision,横轴为Recall, 则曲线下面积为Precision对Recall的积分,即

 其中P(Y \le c)是概率密度函数Py(c)的分布函数,所以对齐求导得到的是Py(c),故上式可化为

 故可知,PR曲线下面积为Precision在概率密度函数Py(c)上的期望。

得到了上面理性分析的结果,我们可以再感性地理解一下这是什么意思,Y表示样本为正样本,precision是指我们判定的正类中有多少是真正的正类,随着我们遍历完所有的阈值c,会得到一系列对应的precision,如果我们的样本足够多,可知我们的c会非常多,precision值也很多,可以想象,这个期望值就会逼近真实标签中正样本占总样本的比例,这也是期望的含义, 抛硬币实验中,我们会得到正面的期望为0.5,掷骰子的实验中每个点的期望为1/6.

所以,PR曲线下的面积在统计上表示Precision的期望,实际含义为正样本的比例。

故而,我们知道,对于ROC曲线下的面积我们知道,如果其面积小于0.5表示分类器的性能低于随机猜测。但是,对于PR曲线,它下面的面积如果小于0.5就不一定表示分类器性能不好,因为如果我们拿到的样本是不均衡的,比如正样本远远少于负样本,比如上面我们在对比ROC与PR曲线时所举的例子,正样本与负样本的比例为1:10,我们得到的ROC和PR曲线如下图

 图中实线和虚线表示两个不同的分类器,以实线代表的分类器为例,可知此时PR曲线下的面积明显很小,但是其对应的ROC却很好,说明该分类器的分类效果是很好的,只是因为正样本的比例变小了,使得PR的曲线下降了。

综上,我们已经讨论了分类任务中常见的评价指标,总结如下

accuracy = \frac{​{TP + TN}}{​{TP + FP + FN + TN}}

precision = \frac{​{TP}}{​{TP + FP}}

recall = \frac{​{TP}}{​{TP + FN}}

sensitivity = \frac{​{TP}}{​{TP + FN}}

TPR = \frac{​{TP}}{​{TP + FN}}

FPR = \frac{​{FP}}{​{FP + TN}}

specificity = \frac{​{TN}}{​{TN + FP}}

我们可以发现,recall=sensitivity=TPR

以上我们讨论的是分类器能够给出预测概率的情况,如逻辑斯蒂回归分类器,神经网络分类器,朴素贝叶斯分类器。但是对于那些离散型的分类器,即最后只给出分类类别,而没有概率值的分类器,如SVM,决策树,该如何计算他们的ROC曲线呢?

以SVM为例,既然ROC是需要概率的,那么我们就让SVM输出概率。

标准的SVM得到分类超平面

{w^*} \cdot x + {b^*} = 0

之后,对于测试集中的样本\tilde x,计算其到分类超平面的距离,然后使用符号函数进行分类,即

sign\left( {​{w^*} \cdot \tilde x + {b^*}} \right)

而更常用的是还有核函数的SVM,其决策函数为:

sign\left( {\sum\limits_{i = 1}^N {​{\alpha ^*}{y_i}K\left( {\tilde x,{x_i}} \right)} + {b^*}} \right)

将其转变为概率输出的方式是,取阈值化之前的输出,即

f\left( x \right) = \sum\limits_{i = 1}^N {​{\alpha ^*}{y_i}K\left( {\tilde x,{x_i}} \right)} + {b^*}

构造后验概率

P\left( {y = 1|f} \right) = \frac{1}{​{1 + \exp \left( {Af + B} \right)}}

即可使得其输出概率。

至于其中的两个参数,使用如下方案学习得到:

使用三者交叉验证,用前两部分训练SVM,用剩下的一部分学习A和B,得到最优的A和B。

进而得到最终的模型,实现SVM的概率输出。

目前所有的实现基本上都是使用台湾国立大学林智仁教授的libsvm所实现的方法。

全文结束~

参考:

[1] ROC Graphs: Notes and Practical Considerations for Data Mining Researchers

[2] 周志华《机器学习》

[3] Probabilistic interpretation of AUC | 0-fold Cross-Validation

[4] Measuring classifier performance: a coherent alternative to the area under the ROC curve

[5] Probabilistic output for SVM and comparisons to regularized likelihood methods

[6] A Note on Platt’s Probabilistic Outputs for Support Vector Machines

[7] LIBSVM: A Library for Support Vector Machines

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/143010
推荐阅读
相关标签
  

闽ICP备14008679号