auc(area under curve)是機器學習二分類模型中非常常用的評估指標,相比於f1-score對專案的不平衡有更大的容忍性,目前常見的機器學習庫中(比如scikit-learn)一般也都是整合該指標的計算,但是有時候模型是單獨的或者自己編寫的,此時想要評估訓練模型的好壞就得自己搞乙個auc計算模組,本文在查詢資料時發現libsvm-tools有乙個非常通俗易懂的auc計算,因此摳出來用作日後之用。
參考:
#! -*- coding=utf-8 -*-
import pylab as pl
from math import log,exp,sqrt
evaluate_result=
"you file path"
db =
#[score,nonclk,clk]
pos, neg =0,
0with
open
(evaluate_result,
'r')
as fs:
for line in fs:
nonclk,clk,score = line.strip(
).split(
'\t'
) nonclk =
int(nonclk)
clk =
int(clk)
score =
float
(score)
[score,nonclk,clk]
) pos += clk
neg += nonclk
db =
sorted
(db, key=
lambda x:x[0]
, reverse=
true
)#計算roc座標點
xy_arr =
tp, fp =0.
,0.for i in
range
(len
(db)):
tp += db[i][2
] fp += db[i][3
][fp/neg,tp/pos]
)#計算曲線下面積
auc =0.
prev_x =
0for x,y in xy_arr:
if x != prev_x:
auc +=
(x - prev_x)
* y prev_x = x
print
"the auc is %s."
%auc
x =[_v[0]
for _v in xy_arr]
y =[_v[1]
for _v in xy_arr]
pl.title(
"roc curve of %s (auc = %.4f)"%(
'svm'
,auc)
)pl.xlabel(
"false positive rate"
)pl.ylabel(
"true positive rate"
)pl.plot(x, y)
# use pylab to plot x and y
pl.show(
)# show the plot on the screen
from sklearn.metrics import roc_auc_score
score =
[1.1
,0.2
,3.4
,5.1
,2.1
,0.4
,2.4
]label =[0
,0,1
,0,1
,0,0
]auc = roc_auc_score(label,score)
print
'auc:'
,auc
def
getauc
(labels, pred)
:'''將pred陣列的索引值按照pred[i]的大小正序排序,返回的sorted_pred是乙個新的陣列,
sorted_pred[0]就是pred[i]中值最小的i的值,對於這個例子,sorted_pred[0]=8
'''sorted_pred =
sorted
(range
(len
(pred)
), key=
lambda i: pred[i]
) pos =
0.0# 正樣本個數
neg =
0.0# 負樣本個數
auc =
0.0 last_pre = pred[sorted_pred[0]
] count =
0.0 pre_sum =
0.0# 當前位置之前的**值相等的rank之和,rank是從1開始的,所以在下面的**中就是i+1
pos_count =
0.0# 記錄**值相等的樣本中標籤是正的樣本的個數
for i in
range
(len
(sorted_pred)):
if labels[sorted_pred[i]
]>0:
pos +=
1else
: neg +=
1if last_pre != pred[sorted_pred[i]]:
# 當前的**概率值與前乙個值不相同
# 對於**值相等的樣本rank需要取平均值,並且對rank求和
auc += pos_count * pre_sum / count
count =
1 pre_sum = i +
1# 更新為當前的rank
last_pre = pred[sorted_pred[i]
]if labels[sorted_pred[i]
]>0:
pos_count =
1# 如果當前樣本是正樣本 ,則置為1
else
: pos_count =
0# 反之置為0
else
: pre_sum += i +
1# 記錄rank的和
count +=
1# 記錄rank和對應的樣本數,pre_sum / count就是平均值了
if labels[sorted_pred[i]
]>0:
# 如果是正樣本
pos_count +=
1# 正樣本數加1
auc += pos_count * pre_sum / count # 加上最後乙個**值相同的樣本組
auc -= pos *
(pos +1)
/2# 減去正樣本在正樣本之前的情況
auc = auc /
(pos * neg)
# 除以總的組合數
return auc
AUC及其計算
含義理解二 auc are under curve 是乙個模型的評價指標,用於分類任務。那麼這個指標代表什麼呢?這個指標想表達的含義,簡單來說其實就是隨機抽出一對樣本 乙個正樣本,乙個負樣本 然後用訓練得到的分類器來對這兩個樣本進行 得到正樣本的概率大於負樣本概率的概率。參考方法一 定義計算 計算面...
auc計算公式 AUC與logloss
在ctr預估中,auc area under curve 用於衡量排序能力,auc值為roc曲線下的面積,是乙個概率值,越大越好。簡單來說這個指標的含義其實就是隨機抽出一對樣本 乙個正樣本,乙個負樣本 然後用訓練得到的分類器來對這兩個樣本進行 得到正樣本的概率大於負樣本概率的概率。auc是乙個二分類...
AUC計算方法總結
auc area under the curve 是一種用來度量分類模型好壞的乙個標準,這裡不詳細敘述auc的定義及意義,詳見wiki。演算法1 如下圖是乙個分類器的結果,計算點形成的折線的面積就是auc的值 如下 public double aucalg1 if scores 1 contains...