ROC, AUC 以及 Python實現AUC計算

2021-10-05 04:27:13 字數 1744 閱讀 3233

本文主要對roc,auc概念進行介紹,並且用python手動實現auc的計算

對於乙個二分類分類器來說,對於任意樣本,我們都可以得到該樣本屬於正例的概率。我們可以根據這個概率對所有樣本進行排序,「最可能」是正例的排在最前面,「最不可能」是正例的排在最後面,分類過程就相當於選擇某個「截斷點」將所有樣本分成兩類。只是我們一般選取0.5為這個截斷點,屬於正例的概率大於0.5的就認為該樣本為正例,屬於正例的概率小於0.5的就認為該樣本為負例。

roc曲線的全稱是「受試者工作特徵」曲線,根據我們對所有樣本屬於正例的概率進行排序,按此排序結果,從高到低依次選取某一概率為截斷點,以tpr(真正例率)為縱軸,以fpr(假正例率)為橫軸繪製得到。

t pr

=tpt

p+fn

tpr = \frac

tpr=tp

+fnt

p​f pr

=fpf

p+tn

fpr = \frac

fpr=fp

+tnf

p​而auc是指roc曲線下面積,一般可以用auc來比較多個分類器的效能好壞。

下面介紹如何用python實現auc的計算,假設我們有n個樣本的真實標籤(y1

,y2,

y3,…

,yn)

(y_1, y_2,y_3,\dots,y_n)

(y1​,y

2​,y

3​,…

,yn​

),以及這n個樣本**為正例的概率(p1

,p2,

p3,…

,p4)

(p_1, p_2,p_3,\dots,p_4)

(p1​,p

2​,p

3​,…

,p4​

)

import numpy as np

defcalculate_auc

(y, p)

:'''

y: 真實label的向量 ndarray

p: **為正例的概率的向量 ndarray

'''# 保證相同概率的0排在1前面

tmp = np.array(

sorted

(zip

(y, p)

, key=

lambda x:

(x[1],

-x[0])

, reverse=

true))

neg =

0 pos =

0for i in y:

if i ==0:

neg +=

1elif i ==1:

pos +=

1 loss =

0 neglst = np.array(

)for i in

range

(len

(tmp)):

if tmp[i][0

]==1:

loss += np.

sum(neglst == tmp[i][1

])/2

+ np.

sum(neglst != tmp[i][1

])else:[

1])return

1- loss /

(neg*pos)

異常檢測 LOF演算法簡介以及Python實現

lof local outlier factor 演算法是基於密度的異常點檢測演算法,適合於高維資料檢測。離群點處的密度應該較鄰域內其他點的密度小。k距離 對於點p,將其他點與之距離進行從小到大排序,第k個即為k距離 k距離鄰域 到點p的距離小於等於k距離點,共k個 可達距離 若到點p的實際距離小於...

NFS搭建以及rsync inotify實時備份

搭建nfs 假設有2臺server,分別是server1和server2。現在要在server1上安裝nfs,在server2上掛載該目錄。1.在兩台server上都安裝 yum install portmap nfs utils nfs utils lib 2.編輯server1檔案 etc ex...

python實訓成果 python實訓第一天

實訓第一天總結 常量 常量也是變數,在python中大家都規定只要是大寫的變數都稱之為常量 使用者與程式互動 數字型別 整型int 浮點型 float 字串型別 列表型別 字典型別 在 內,都逗號隔開,可存放多個值,每個值以key value的形式儲存 存 dict1 取 print dict1 n...