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)>F−1(F(t)) ∣ y(x)=1] dF(t)=∫01P[c(x)>t ∣ y(x)=1]⋅∂t∂F dt=∫01P[c(x)>t ∣ y(x)=1]⋅p(c(x′)=t ∣ y(x′)=0) dt=∫01∫t1p(c(x)=s ∣ y(x)=1)⋅p(c(x′)=t ∣ y(x′)=0) ds dt=∫01∫t1p(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,...,M−1,记录其在排序后的所有样本中下标为 r i r_i ri, r i = 0 , 1 , . . . , n − 1 r_i = 0, 1, ..., n-1 ri=0,1,...,n−1,那么比改正样本小的负样本数量为 r i − M + i r_i-M+i ri−M+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×N∑i=0M−1ri+2M(M−1)
总的时间复杂度在 O ( n l o g n ) \mathcal{O}(nlogn) O(nlogn),空间复杂度在 O ( n ) \mathcal{O}(n) O(n)。
如果存在若干样本打分相同的情况,可用其不并列的排名的均值作为其新的排名再做计算。(比如排在3,4的样本分数相同,可用3.5作为二者的新排名)。