摘要:問題是什么能拿來干什么如何求解深入理解是什么混淆矩陣混淆矩陣是理解大多數(shù)評價指標(biāo)的基礎(chǔ),毫無疑問也是理解的基礎(chǔ)。內(nèi)容的召回往往是根據(jù)的排序而決定的。
問題:
AUC是什么
AUC能拿來干什么
AUC如何求解(深入理解AUC)
AUC是什么 混淆矩陣(Confusion matrix)混淆矩陣是理解大多數(shù)評價指標(biāo)的基礎(chǔ),毫無疑問也是理解AUC的基礎(chǔ)。豐富的資料介紹著混淆矩陣的概念,這里用一個經(jīng)典圖來解釋混淆矩陣是什么。
顯然,混淆矩陣包含四部分的信息:
True negative(TN),稱為真陰率,表明實際是負(fù)樣本預(yù)測成負(fù)樣本的樣本數(shù)
False positive(FP),稱為假陽率,表明實際是負(fù)樣本預(yù)測成正樣本的樣本數(shù)
False negative(FN),稱為假陰率,表明實際是正樣本預(yù)測成負(fù)樣本的樣本數(shù)
True positive(TP),稱為真陽率,表明實際是正樣本預(yù)測成正樣本的樣本數(shù)
對照著混淆矩陣,很容易就能把關(guān)系、概念理清楚,但是久而久之,也很容易忘記概念。不妨我們按照位置前后分為兩部分記憶,前面的部分是True/False表示真假,即代表著預(yù)測的正確性,后面的部分是positive/negative表示正負(fù)樣本,即代表著預(yù)測的結(jié)果,所以,混淆矩陣即可表示為正確性-預(yù)測結(jié)果的集合。現(xiàn)在我們再來看上述四個部分的概念(均代表樣本數(shù),下述省略):
TN,預(yù)測是負(fù)樣本,預(yù)測對了
FP,預(yù)測是正樣本,預(yù)測錯了
FN,預(yù)測是負(fù)樣本,預(yù)測錯了
TP,預(yù)測是正樣本,預(yù)測對了
幾乎我所知道的所有評價指標(biāo),都是建立在混淆矩陣基礎(chǔ)上的,包括準(zhǔn)確率、精準(zhǔn)率、召回率、F1-score,當(dāng)然也包括AUC。
ROC曲線事實上,要一下子弄清楚什么是AUC并不是那么容易,首先我們要從ROC曲線說起。對于某個二分類分類器來說,輸出結(jié)果標(biāo)簽(0還是1)往往取決于輸出的概率以及預(yù)定的概率閾值,比如常見的閾值就是0.5,大于0.5的認(rèn)為是正樣本,小于0.5的認(rèn)為是負(fù)樣本。如果增大這個閾值,預(yù)測錯誤(針對正樣本而言,即指預(yù)測是正樣本但是預(yù)測錯誤,下同)的概率就會降低但是隨之而來的就是預(yù)測正確的概率也降低;如果減小這個閾值,那么預(yù)測正確的概率會升高但是同時預(yù)測錯誤的概率也會升高。實際上,這種閾值的選取也一定程度上反映了分類器的分類能力。我們當(dāng)然希望無論選取多大的閾值,分類都能盡可能地正確,也就是希望該分類器的分類能力越強(qiáng)越好,一定程度上可以理解成一種魯棒能力吧。
為了形象地衡量這種分類能力,ROC曲線橫空出世!如下圖所示,即為一條ROC曲線(該曲線的原始數(shù)據(jù)第三部分會介紹)。現(xiàn)在關(guān)心的是:
橫軸:False Positive Rate(假陽率,F(xiàn)PR)
縱軸:True Positive Rate(真陽率,TPR)
假陽率,簡單通俗來理解就是預(yù)測為正樣本但是預(yù)測錯了的可能性,顯然,我們不希望該指標(biāo)太高。
$$FPR=frac{FP}{TN+FP}$$
真陽率,則是代表預(yù)測為正樣本但是預(yù)測對了的可能性,當(dāng)然,我們希望真陽率越高越好。
$$TPR=frac{TP}{TP+FN}$$
顯然,ROC曲線的橫縱坐標(biāo)都在[0,1]之間,自然ROC曲線的面積不大于1。現(xiàn)在我們來分析幾個特殊情況,從而更好地掌握ROC曲線的性質(zhì):
(0,0):假陽率和真陽率都為0,即分類器全部預(yù)測成負(fù)樣本
(0,1):假陽率為0,真陽率為1,全部完美預(yù)測正確,happy
(1,0):假陽率為1,真陽率為0,全部完美預(yù)測錯誤,悲劇
(1,1):假陽率和真陽率都為1,即分類器全部預(yù)測成正樣本
TPR=FPR,斜對角線,預(yù)測為正樣本的結(jié)果一半是對的,一半是錯的,代表隨機(jī)分類器的預(yù)測效果
于是,我們可以得到基本的結(jié)論:ROC曲線在斜對角線以下,則表示該分類器效果差于隨機(jī)分類器,反之,效果好于隨機(jī)分類器,當(dāng)然,我們希望ROC曲線盡量除于斜對角線以上,也就是向左上角(0,1)凸。
AUC(Area under the ROC curve)ROC曲線一定程度上可以反映分類器的分類效果,但是不夠直觀,我們希望有這么一個指標(biāo),如果這個指標(biāo)越大越好,越小越差,于是,就有了AUC。AUC實際上就是ROC曲線下的面積。AUC直觀地反映了ROC曲線表達(dá)的分類能力。
AUC = 1,代表完美分類器
0.5 < AUC < 1,優(yōu)于隨機(jī)分類器
0 < AUC < 0.5,差于隨機(jī)分類器
AUC能拿來干什么從作者有限的經(jīng)歷來說,AUC最大的應(yīng)用應(yīng)該就是點擊率預(yù)估(CTR)的離線評估。CTR的離線評估在公司的技術(shù)流程中占有很重要的地位,一般來說,ABTest和轉(zhuǎn)全觀察的資源成本比較大,所以,一個合適的離線評價可以節(jié)省很多時間、人力、資源成本。那么,為什么AUC可以用來評價CTR呢?我們首先要清楚兩個事情:
CTR是把分類器輸出的概率當(dāng)做是點擊率的預(yù)估值,如業(yè)界常用的LR模型,利用sigmoid函數(shù)將特征輸入與概率輸出聯(lián)系起來,這個輸出的概率就是點擊率的預(yù)估值。內(nèi)容的召回往往是根據(jù)CTR的排序而決定的。
AUC量化了ROC曲線表達(dá)的分類能力。這種分類能力是與概率、閾值緊密相關(guān)的,分類能力越好(AUC越大),那么輸出概率越合理,排序的結(jié)果越合理。
我們不僅希望分類器給出是否點擊的分類信息,更需要分類器給出準(zhǔn)確的概率值,作為排序的依據(jù)。所以,這里的AUC就直觀地反映了CTR的準(zhǔn)確性(也就是CTR的排序能力)
AUC如何求解步驟如下:
得到結(jié)果數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)為:(輸出概率,標(biāo)簽真值)
對結(jié)果數(shù)據(jù)按輸出概率進(jìn)行分組,得到(輸出概率,該輸出概率下真實正樣本數(shù),該輸出概率下真實負(fù)樣本數(shù))。這樣做的好處是方便后面的分組統(tǒng)計、閾值劃分統(tǒng)計等
對結(jié)果數(shù)據(jù)按輸出概率進(jìn)行從大到小排序
從大到小,把每一個輸出概率作為分類閾值,統(tǒng)計該分類閾值下的TPR和FPR
微元法計算ROC曲線面積、繪制ROC曲線
代碼如下所示:
import pylab as pl from math import log,exp,sqrt import itertools import operator def read_file(file_path, accuracy=2): db = [] #(score,nonclk,clk) pos, neg = 0, 0 #正負(fù)樣本數(shù)量 #讀取數(shù)據(jù) with open(file_path,"r") as fs: for line in fs: temp = eval(line) #精度可控 #score = "%.1f" % float(temp[0]) score = float(temp[0]) trueLabel = int(temp[1]) sample = [score, 0, 1] if trueLabel == 1 else [score, 1, 0] score,nonclk,clk = sample pos += clk #正樣本 neg += nonclk #負(fù)樣本 db.append(sample) return db, pos, neg def get_roc(db, pos, neg): #按照輸出概率,從大到小排序 db = sorted(db, key=lambda x:x[0], reverse=True) file=open("data.txt","w") file.write(str(db)) file.close() #計算ROC坐標(biāo)點 xy_arr = [] tp, fp = 0., 0. for i in range(len(db)): tp += db[i][2] fp += db[i][1] xy_arr.append([fp/neg,tp/pos]) return xy_arr def get_AUC(xy_arr): #計算曲線下面積 auc = 0. prev_x = 0 for x,y in xy_arr: if x != prev_x: auc += (x - prev_x) * y prev_x = x return auc def draw_ROC(xy_arr): x = [_v[0] for _v in xy_arr] y = [_v[1] for _v in xy_arr] pl.title("ROC curve of %s (AUC = %.4f)" % ("clk",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
數(shù)據(jù):提供的數(shù)據(jù)為每一個樣本的(預(yù)測概率,真實標(biāo)簽)tuple
數(shù)據(jù)鏈接:https://pan.baidu.com/s/1c1FUzVM,密碼1ax8
計算結(jié)果:AUC=0.747925810016,與Spark MLLib中的roc_AUC計算值基本吻合
當(dāng)然,選擇的概率精度越低,AUC計算的偏差就越大
ROC曲線反映了分類器的分類能力,結(jié)合考慮了分類器輸出概率的準(zhǔn)確性
AUC量化了ROC曲線的分類能力,越大分類效果越好,輸出概率越合理
AUC常用作CTR的離線評價,AUC越大,CTR的排序能力越強(qiáng)
參考資料很多大牛對AUC都有自己的認(rèn)識和理解,這里圍繞和AUC的意義是什么,給出一些能幫助自己理解AUC的 大牛們的回答
[1]From 機(jī)器學(xué)習(xí)和統(tǒng)計里面的auc怎么理解?
[2]From 機(jī)器學(xué)習(xí)和統(tǒng)計里面的auc怎么理解?
[3]From 精確率、召回率、F1 值、ROC、AUC 各自的優(yōu)缺點是什么?
[4]From 多高的AUC才算高?
其他一些參考資料:
利用Python畫ROC曲線和AUC值計算
精確率與召回率,RoC曲線與PR曲線
ROC和AUC介紹以及如何計算AUC
基于混淆矩陣的評價指標(biāo)
機(jī)器學(xué)習(xí)性能評估指標(biāo)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/40659.html
摘要:反映了分類器檢測假負(fù)性的能力。我們將從混淆矩陣開始,這是表示分類結(jié)果的最簡單方法。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/c28... 什么是分類模型? 分類是將每個數(shù)據(jù)集合中的元素分配給一個已知的數(shù)據(jù)類別。 那么分類都有哪些任務(wù)呢? 根據(jù)醫(yī)生的病歷記錄,將檢查者區(qū)分為健康或者...
閱讀 2956·2023-04-26 01:52
閱讀 3481·2021-09-04 16:40
閱讀 3640·2021-08-31 09:41
閱讀 1780·2021-08-09 13:41
閱讀 576·2019-08-30 15:54
閱讀 2970·2019-08-30 11:22
閱讀 1624·2019-08-30 10:52
閱讀 957·2019-08-29 13:24