ROC曲线与AUC

ROC曲线

受试者工作特征曲线(Receiver Operating Characteristic Curve, ROC)

  • 横坐标:假阳率
    F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP
    表示在真正为阴性的样本中,预测为阳性的样本的比例。
  • 纵坐标:真阳率(Recall)
    T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP
    表示在所有真正为阳性的样本中,预测为阳性的比例

通常,网络给出的预测值是处于 [ 0 , 1 ] [0, 1] [0,1]的(比如通过sigmoid),之后通过选取阈值划分正、负样本。改变阈值后, F P R FPR FPR T P R TPR TPR也会随之改变。不断改变阈值,将得到的 ( F P R , T P R ) (FPR, TPR) (FPR,TPR)点描出即可得到ROC曲线。

AUC的理解

ROC曲线下的面积(Area Under ROC Curve,AUC)

AUC越大,曲线越靠近左上角,对于任意阈值, ( F P R , T P R ) (FPR, TPR) (FPR,TPR)越靠近 ( 0 , 1 ) (0, 1) (0,1),假阳率越靠近0,说明对于真实为阴性的样本,基本都预测为阴性了;真阳率越靠近1,说明对于真实为阳性的样本,基本都预测为阳性了。这也说明,AUC越大(越靠近1),分类的效果越好。

也可以通过数学推导得到AUC一个更加直观的理解。

分类器 c c c p p p维样本 x \mathbf{x} x映射到 [ 0 , 1 ] [0, 1] [0,1],即 c : R p → [ 0 , 1 ] c: \mathbb{R}^p \to [0, 1] c:Rp[0,1]

若样本为正样本(阳性),记作 y ( x ) = 1 y(\mathbf{x})= 1 y(x=1;若样本为负样本(阴性),记作 y ( x ) = 0 y(\mathbf{x}) = 0 y(x)=0。真阳率和假阳率都是阈值 t t t的函数,记前者为 T ( t ) T(t) T(t),后者为 F ( t ) F(t) F(t),那么

T ( t ) = P [ c ( x ) > t   ∣   y ( x ) = 1 ] F ( t ) = P [ c ( x ) > t   ∣   y ( x ) = 0 ] T(t) = \mathrm{P}[c(\mathbf{x}) > t ~|~ y(\mathbf{x}) = 1] \\ F(t) = \mathrm{P}[c(\mathbf{x}) > t ~|~ y(\mathbf{x}) = 0] T(t)=P[c(x)>t  y(x)=1]F(t)=P[c(x)>t  y(x)=0]

在ROC曲线中,可以将 T T T看作是 F F F的函数,记概率密度函数为 p p p,那么
A U C = ∫ 0 1 T [ F ( t ) ]   d F ( t ) = ∫ 0 1 P [ c ( x ) > F − 1 ( F ( t ) )   ∣   y ( x ) = 1 ]   d F ( t ) = ∫ 0 1 P [ c ( x ) > t   ∣   y ( x ) = 1 ] ⋅ ∂ F ∂ t   d t = ∫ 0 1 P [ c ( x ) > t   ∣   y ( x ) = 1 ] ⋅ p ( c ( x ′ ) = t   ∣   y ( x ′ ) = 0 )   d t = ∫ 0 1 ∫ t 1 p ( c ( x ) = s   ∣   y ( x ) = 1 ) ⋅ p ( c ( x ′ ) = t   ∣   y ( x ′ ) = 0 )   d s   d t = ∫ 0 1 ∫ t 1 p ( c ( x ) = s ,   c ( x ′ ) = t   ∣   y ( x ) = 1 ,   y ( x ′ ) = 0 )   d s   d t = P [ c ( x ) > c ( x ′ )   ∣   y ( x ) = 1 ,   y ( x ′ ) = 0 ] \begin{aligned} AUC &= \int_{0}^{1}{T[F(t)]} ~\mathrm{d}F(t) \\ &= \int_{0}^{1}{\mathrm{P}[c(\mathbf{x}) > F^{-1}(F(t)) ~|~ y(\mathbf{x}) = 1]} ~\mathrm{d}F(t) \\ &= \int_{0}^{1}{\mathrm{P}[c(\mathbf{x}) > t ~|~ y(\mathbf{x}) = 1]\cdot \frac{\partial F}{\partial t}} ~\mathrm{d}t \\ &= \int_{0}^{1}{\mathrm{P}[c(\mathbf{x}) > t ~|~ y(\mathbf{x}) = 1]\cdot p(c(\mathbf{x'}) = t ~|~ y(\mathbf{x'}) = 0)} ~\mathrm{d}t \\ &= \int_{0}^{1}{ \int_{t}^{1}{p(c(\mathbf{x}) = s ~|~ y(\mathrm{x}) = 1) } \cdot p(c(\mathbf{x'}) = t ~|~ y(\mathbf{x'}) = 0)} ~ \mathrm{d}s ~\mathrm{d}t \\ &= \int_{0}^{1}{ \int_{t}^{1}{p(c(\mathbf{x}) = s } ,~c(\mathbf{x'}) = t ~|~ y(\mathbf{x}) = 1, ~ y(\mathrm{x'}) = 0 }) ~ \mathrm{d}s ~\mathrm{d}t \\ &= \mathrm{P}[c(\mathbf{x}) > c(\mathbf{x'}) ~|~ y(\mathbf{x}) = 1, ~ y(\mathrm{x'}) = 0 ] \end{aligned} AUC=01T[F(t)] dF(t)=01P[c(x)>F1(F(t))  y(x)=1] dF(t)=01P[c(x)>t  y(x)=1]tF dt=01P[c(x)>t  y(x)=1]p(c(x)=t  y(x)=0) dt=01t1p(c(x)=s  y(x)=1)p(c(x)=t  y(x)=0) ds dt=01t1p(c(x)=s, c(x)=t  y(x)=1, y(x)=0) ds dt=P[c(x)>c(x)  y(x)=1, y(x)=0]
这里要求 x \mathbf{x} x x ′ \mathbf{x'} x是独立的。

上面推导得到结论的直观理解是,如果随机从正样本中取出一个样本 x 0 \mathbf{x_0} x0,随机从负样本中取出一个样本 x 0 ′ \mathbf{x_0'} x0,分类器对 x 0 \mathbf{x_0} x0打分大于 x 0 ′ \mathbf{x_0'} x0的概率即为AUC。

从另一个角度来看,对于推荐系统,对于一个正样本和一个负样本,正样本的分数高于负样本的概率越大(AUC越大),说明正样本排在负样本前的概率越大。即,AUC is the probability of correct ranking of a random “positive - negative” pair.

AUC的计算

既然AUC是ROC曲线与x正半轴围成的面积,当然可以用计算面积的方式来计算AUC,只不过有些慢,因为需要不断改变阈值,计算真阳率和假阳率。假设样本数量为 n n n,计算一个阈值下真阳率和假阳率的复杂度在 O ( n ) \mathcal{O}(n) O(n),如果取 m m m个阈值,得到ROC曲线的复杂度是 O ( m × n ) \mathcal{O}(m\times n) O(m×n),再计算面积,大概总的复杂度在 O ( m 2 × n ) \mathcal{O}(m^2\times n) O(m2×n),虽然还有优化的空间,但也过于复杂。(比如先排好序,然后记录阈值前后正负样本的个数,大概在 O ( m × ( m + n ) \mathcal{O}(m\times (m+n) O(m×(m+n))。以上复杂度都是凭感觉写的,不一定对orz。

另一种方法是以频率估计概率,以排列正确的(正样本排在负样本前)的“正-负样本对”占所有“正-负样本对”的比例估计“正-负样本对”排列正确的概率。方法如下

假设有 N N N个正样本和 M M M个负样本, M + N = n M+N=n M+N=n

1 将样本分数从小到大排列(暂且认为是 O ( n l o g n ) \mathcal{O}(nlogn) O(nlogn)

2 对于第 i i i大的正样本, i = 1 , 2 , . . . , M − 1 i = 1, 2, ..., M-1 i=1,2,...,M1,记录其在排序后的所有样本中下标为 r i r_i ri r i = 0 , 1 , . . . , n − 1 r_i = 0, 1, ..., n-1 ri=0,1,...,n1,那么比改正样本小的负样本数量为 r i − M + i r_i-M+i riM+i。( O ( n ) \mathcal{O}(n) O(n)

3 得到结果( O ( 1 ) \mathcal{O}(1) O(1)
A U C = ∑ i = 0 M − 1 r i + M ( M − 1 ) 2 M × N AUC = \frac{\sum_{i=0}^{M-1}{r_i} + \frac{M(M-1)}{2}}{M\times N} AUC=M×Ni=0M1ri+2M(M1)

总的时间复杂度在 O ( n l o g n ) \mathcal{O}(nlogn) O(nlogn),空间复杂度在 O ( n ) \mathcal{O}(n) O(n)

如果存在若干样本打分相同的情况,可用其不并列的排名的均值作为其新的排名再做计算。(比如排在3,4的样本分数相同,可用3.5作为二者的新排名)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值