很早以前就知道這些概念了,不過由於跟自己的認知習慣不一樣,所以碰到了還是經常會忘。於是索性把這些概念總結一下,以後再忘了也好找(其他的文章太囉嗦了,計算方法也寫的不清不楚….)
另外我也會陸續更新一些其他的機器學習相關概念和指標,即是方便自己,也方便他人吧。
注意:本文將混用正負樣本和陽性(+)陰性(-)這兩套說法
真陽率(true positive rate, tpr)就是: 真
陽率=a
a+c
含義是檢測出來的真陽性樣本數除以所有真實陽性樣本數。
假陽率(false positive rate, fpr)就是: 假
陽率=b
b+d
含義是檢測出來的假陽性樣本數除以所有真實陰性樣本數。
很簡單,就是把假陽率當x軸,真陽率當y軸畫乙個二維平面直角座標系。然後不斷調整檢測方法(或機器學習中的分類器)的閾值,即最終得分高於某個值就是陽性,反之就是陰性,得到不同的真陽率和假陽率數值,然後描點。就可以得到一條roc曲線。
需要注意的是,roc曲線必定起於(0,0),止於(1,1)。因為,當全都判斷為陰性(-)時,就是(0,0);全部判斷為陽性(+)時就是(1,1)。這兩點間斜率為1的線段表示隨機分類器(對真實的正負樣本沒有區分能力)。所以一般分類器需要在這條線上方。
畫出來大概是長下面這樣**自這裡):
顧名思義,就是這條roc曲線下方的面積了。越接近1表示分類器越好。
但是,直接計算auc很麻煩,但由於其跟wilcoxon-mann-witney test等價,所以可以用這個測試的方法來計算auc。wilcoxon-mann-witney test指的是,任意給乙個正類樣本和乙個負類樣本,正類樣本的score有多大的概率大於負類樣本的score(score指分類器的打分)。
方案一:
我們可以對於總樣本中的m個正樣本和n個負樣本,組成m×
n 個pair,如果某個pair正樣本score大於負樣本,則記1分,反之記0分,相等記0.5分。然後總分除以m×
n 就是auc的值了。複雜度o(
m×n)
方案二:
基本思想一樣,不過複雜度可以縮減到o(
(m+n
)log
(m+n
))。
首先,我們將所有樣本得分從大到小排序,則排名最高的樣本rank為m+n,第二的為m+n-1,以此類推。然後我們將所有正樣本的rank加和,其思想為:排名k的正樣本至多比k-1個負樣本的score要大。當我們將正樣本的rank加和後,再減去(1
+m)m
/2,即正樣本的個數,就是正樣本score比負樣本score大的pair個數。再除以o(
m×n)
就是auc的值了,公式如下: a
uc=∑
i∈po
siti
vera
nki−
(1+m
)m2m
×n
注意:對score相等的樣本,需要賦予相同的rank(無論這個相等的score是出現在同類樣本還是不同類的樣本之間,都需要這樣處理)。具體操作就是把所有這些score相等的樣本的rank取平均。然後再使用上述公式。比如score為0.8的有兩個樣本,rank為7和8,則其最終代入公式的rank為7.5