詳解ROC AUC計算過程

2021-07-15 11:18:54 字數 3762 閱讀 7566

roc全稱是「受試者工作特徵」(receiver operating characteristic)。roc曲線的面積就是auc(area under the curve)。auc用於衡量「二分類問題」機器學習演算法效能(泛化能力)。

python中sklearn直接提供了用於計算roc的函式[1],下面就把函式背後的計算過程詳細講一下。

首先,解釋幾個二分類問題中常用的概念:true positive,false positive,true negative,false negative。它們是根據真實類別與**類別的組合來區分的。

假設有一批test樣本,這些樣本只有兩種類別:正例和反例。機器學習演算法**類別如下圖(左半部分**類別為正例,右半部分**類別為反例),而樣本中真實的正例類別在上半部分,下半部分為真實的反例。

樣本中的真實正例類別總數即tp+fn。tpr即true positive rate,tpr = tp/(tp+fn)。

同理,樣本中的真實反例類別總數為fp+tn。fpr即false positive rate,fpr=fp/(tn+fp)。

還有乙個概念叫」截斷點」。機器學習演算法對test樣本進行**後,可以輸出各test樣本對某個類別的相似度概率。比如t1是p類別的概率為0.3,一般我們認為概率低於0.5,t1就屬於類別n。這裡的0.5,就是」截斷點」。

總結一下,對於計算roc,最重要的三個概念就是tpr,fpr,截斷點

截斷點取不同的值,tprfpr的計算結果也不同。將截斷點不同取值下對應的tprfpr結果畫於二維座標系中得到的曲線,就是roc曲線。橫軸用fpr表示。

sklearn給出了乙個計算roc的例子[1]。

y = np.array([1

,1,2

,2])

scores = np.array(

[0.1

,0.4

,0.35

,0.8])

fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=

2)

通過計算,得到的結果(tpr,fpr,截斷點)為

fpr = array([ 0. ,  0.5,  0.5,  1. ])

tpr = array([ 0.5, 0.5, 1. , 1. ])

thresholds = array([ 0.8 , 0.4 , 0.35, 0.1 ])#截斷點

將結果中的fpr與tpr畫到二維座標中,得到的roc曲線如下(藍色線條表示),roc曲線的面積用auc表示(淡黃色陰影部分)。

上例給出的資料如下

y = np.array([1

,1,2

,2])

scores = np.array(

[0.1

,0.4

,0.35

,0.8

])

用這個資料,計算tpr,fpr的過程是怎麼樣的呢?

y是乙個一維陣列(樣本的真實分類)。陣列值表示類別(一共有兩類,1和2)。我們假設y中的1表示反例,2表示正例。即將y重寫為:

y_true =[0

,0,1,1]

score即各個樣本屬於正例的概率。

樣本**屬於p的概率(score)

真實類別

y[0]

0.1n

y[2]

0.35

py[1]

0.4n

y[3]

0.8p

截斷點依次取值為0.1,0.35,0.4,0.8時,計算tprfpr的結果。

說明只要score>=0.1,它的**類別就是正例。

此時,因為4個樣本的score都大於等於0.1,所以,所有樣本的**類別都為p。

說明只要score>=0.35,它的**類別就是p。

此時,因為4個樣本的score有3個大於等於0.35。所以,所有樣本的**類有3個為p(2個**正確,1乙個**錯誤);1個樣本被**為n(**正確)。

說明只要score>=0.4,它的**類別就是p。

此時,因為4個樣本的score有2個大於等於0.4。所以,所有樣本的**類有2個為p(1個**正確,1乙個**錯誤);2個樣本被**為n(1個**正確,1乙個**錯誤)。

說明只要score>=0.8,它的**類別就是p。所以,所有樣本的**類有1個為p(1個**正確);3個樣本被**為n(2個**正確,1乙個**錯誤)。

用下面描述表示tpr和fpr的計算過程,更容易記住

最理想的分類器,就是對樣本分類完全正確,即fp=0,fn=0。所以理想分類器tpr=1,fpr=0。

roc計算公式,

《機器學習》,周志華

詳解kenlm語言模型計算過程

import kenlm model kenlm.language tri gram language model.arpa score model.score 銀行 放貸 行為 print score 7.153961658477783 score model.score 銀行 放待 行為 pri...

遞迴計算過程和迭代計算過程

這次主要想通過幾個sicp的題目來說明遞迴計算過程和迭代計算過程。1 階乘 遞迴計算過程 define factorial n if n 1 1 factorial n 1 n 迭代計算過程 define fact iter counter result if counter 1 result fa...

PinBlock計算過程

引數 密碼,賬號,leftpinkey,rightpinkey out data 該引數為了帶出計算出來的pinblock 1先將密碼轉換為bcd碼 注意,轉碼後長度會變化,eg ascii碼的6位密碼轉成bcd碼後會縮短 放入pinblock定義好的16個長度的空字元陣列中 2再將賬號轉換為bcd...