形象理解AUC计算公式

形象理解AUC计算公式

AUC是评价一个二分类器性能的主流数值指标,定义为ROC曲线下方的面积,但这个算起来比较复杂,需要统计假阳性。另一个定义更直观,随机给一个正样本和一个负样本,多大概率正样本的score更高。

换一种说法,假设正样本有 M M M个,负样本有 N N N个,在所有 M ∗ N M*N MN个正负样本对中,有多少正样本比负样本分高。提高AUC意味着,将所有样本按score排序,正样本要尽量排在负样本前面。各大博客贴出的AUC计算公式为
A U C = ∑ 正 样 本 R a n k i − 0.5 ∗ ( M + 1 ) ∗ M M ∗ N AUC=\frac{\sum_{正样本}{Rank_i} - 0.5 * (M+1) * M}{M*N} AUC=MNRanki0.5(M+1)M
下面给不能一眼看懂这个公式的童鞋(比如当年的我)举几个例子,希望能有帮助。

举个例子---- n 2 n^2 n2算法

假设我们5个样本,其中2个正样本,3个负样本,按分类器输出的score排序,分最高的Rank为5,次之为4。
如果这个分类器很完美,应该是下面的结果,所有的正样本都排在负样本之前 A U C = 6 / 6 = 1 AUC =6 /6 = 1 AUC=6/6=1

Rank 5 4 3 2 1
正负性 + + - - -

如果稍差一点,6个正负样本[(5, 4), (5, 2), (5, 1), (3, 4), (3, 2), (3, 1)]对中只有(3, 4)正样本没排在负样本之前, A U C = 5 / 6 AUC=5/6 AUC=5/6

Rank 5 4 3 2 1
正负性 + - + - -

再看,这次[(5, 4), (5, 3), (5, 1), (2, 4), (2, 3), (2, 1)] 里有2个正样本没排在负样本之前, A U C = 4 / 6 AUC = 4/6 AUC=4/6

Rank 5 4 3 2 1
正负性 + - - + -

改进----动态规划

上面的穷举法时间复杂度为 O ( n 2 ) O(n^2) O(n2), 其实可以考虑,对每个正样本来说,它能贡献分子中的几项,比如上面的例子,右边有几个样本可以用动态规划从右往左扫一遍得出,贡献几项可以这样得出:e.g. Rank为 r r r的正样本比它后面 r − 1 r-1 r1个样本排得前,扣除它右边的正样本数即可,复杂度 O ( n ) O(n) O(n)

Rank 5 4 3 2 1
正负性 + - - + -
右边有几个正样本 1 1 1 0 0
贡献几项 5-1-1=3 0 0 2-1=1 0

再进一步

由上可知, A U C AUC AUC的分子计算需要对正样本的Rank值求和,减正样本数,再扣除每个正样本右边正样本的数量之和,聪明的你一定发现了,既然有 M M M个正样本,右边正样本数量之和一定为 ( M − 1 ) + . . . + 2 + 1 (M-1) + ... + 2 + 1 (M1)+...+2+1,那么分子就是
∑ i = 1 M R a n k 正 样 本 i − M − [ ( M − 1 ) + . . . + 2 + 1 ] = ∑ i = 1 M R a n k 正 样 本 i − M ( M + 1 ) 2 \sum_{i=1}^{M}{Rank_{正样本i}} - M - [(M-1) + ... + 2 + 1] = \sum_{i=1}^{M}{Rank_{正样本i}} - \frac{M(M+1)}{2} i=1MRankiM[(M1)+...+2+1]=i=1MRanki2M(M+1)

(完)

你可能感兴趣的:(机器学习,auc)