AUC如何計算

2021-09-11 10:26:44 字數 3681 閱讀 7292

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...