本文主要對roc,auc概念進行介紹,並且用python手動實現auc的計算對於乙個二分類分類器來說,對於任意樣本,我們都可以得到該樣本屬於正例的概率。我們可以根據這個概率對所有樣本進行排序,「最可能」是正例的排在最前面,「最不可能」是正例的排在最後面,分類過程就相當於選擇某個「截斷點」將所有樣本分成兩類。只是我們一般選取0.5為這個截斷點,屬於正例的概率大於0.5的就認為該樣本為正例,屬於正例的概率小於0.5的就認為該樣本為負例。
roc曲線的全稱是「受試者工作特徵」曲線,根據我們對所有樣本屬於正例的概率進行排序,按此排序結果,從高到低依次選取某一概率為截斷點,以tpr(真正例率)為縱軸,以fpr(假正例率)為橫軸繪製得到。
t pr
=tpt
p+fn
tpr = \frac
tpr=tp
+fnt
pf 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...