0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AUC是否可以直接用作損失函數(shù)去優(yōu)化呢?

lviY_AI_shequ ? 來(lái)源:未知 ? 作者:李倩 ? 2018-09-11 10:03 ? 次閱讀

引言

CTR問(wèn)題我們有兩種角度去理解,一種是分類的角度,即將點(diǎn)擊和未點(diǎn)擊作為兩種類別。另一種是回歸的角度,將點(diǎn)擊和未點(diǎn)擊作為回歸的值。不管是分類問(wèn)題還是回歸問(wèn)題,一般在預(yù)估的時(shí)候都是得到一個(gè)[0,1]之間的概率值,代表點(diǎn)擊的可能性的大小。

如果將CTR預(yù)估問(wèn)題當(dāng)作回歸問(wèn)題,我們經(jīng)常使用的損失函數(shù)是MSE;如果當(dāng)作二分類問(wèn)題,我們經(jīng)常使用的損失函數(shù)是LogLoss。而對(duì)于一個(gè)訓(xùn)練好的模型,我們往往需要評(píng)估一下模型的效果,或者說(shuō)泛化能力,MSE和LogLoss當(dāng)然也可以作為我們的評(píng)價(jià)指標(biāo),但除此之外,我們最常用的還是AUC。

想到這里,我想到一個(gè)問(wèn)題,AUC是否可以直接用作損失函數(shù)去優(yōu)化呢?

說(shuō)了這么多,我們還不知道AUC是什么呢?不著急,我們從二分類的評(píng)估指標(biāo)慢慢說(shuō)起,提醒一下,本文二分類的類別均為0和1,1代表正例,0代表負(fù)例。

1、從二分類評(píng)估指標(biāo)說(shuō)起

1.1 混淆矩陣

我們首先來(lái)看一下混淆矩陣,對(duì)于二分類問(wèn)題,真實(shí)的樣本標(biāo)簽有兩類,我們學(xué)習(xí)器預(yù)測(cè)的類別有兩類,那么根據(jù)二者的類別組合可以劃分為四組,如下表所示:

上表即為混淆矩陣,其中,行表示預(yù)測(cè)的label值,列表示真實(shí)label值。TP,F(xiàn)P,F(xiàn)N,TN分別表示如下意思:

TP(true positive):表示樣本的真實(shí)類別為正,最后預(yù)測(cè)得到的結(jié)果也為正;FP(false positive):表示樣本的真實(shí)類別為負(fù),最后預(yù)測(cè)得到的結(jié)果卻為正;FN(false negative):表示樣本的真實(shí)類別為正,最后預(yù)測(cè)得到的結(jié)果卻為負(fù);TN(true negative):表示樣本的真實(shí)類別為負(fù),最后預(yù)測(cè)得到的結(jié)果也為負(fù).

可以看到,TP和TN是我們預(yù)測(cè)準(zhǔn)確的樣本,而FP和FN為我們預(yù)測(cè)錯(cuò)誤的樣本。

1.2 準(zhǔn)確率Accruacy

準(zhǔn)確率表示的是分類正確的樣本數(shù)占樣本總數(shù)的比例,假設(shè)我們預(yù)測(cè)了10條樣本,有8條的預(yù)測(cè)正確,那么準(zhǔn)確率即為80%。

用混淆矩陣計(jì)算的話,準(zhǔn)確率可以表示為:

雖然準(zhǔn)確率可以在一定程度上評(píng)價(jià)我們的分類器的性能,不過(guò)對(duì)于二分類問(wèn)題或者說(shuō)CTR預(yù)估問(wèn)題,樣本是極其不平衡的。對(duì)于大數(shù)據(jù)集來(lái)說(shuō),標(biāo)簽為1的正樣本數(shù)據(jù)往往不足10%,那么如果分類器將所有樣本判別為負(fù)樣本,那么仍然可以達(dá)到90%以上的分類準(zhǔn)確率,但這個(gè)分類器的性能顯然是非常差的。

1.3 精確率Precision和召回率Recall

為了衡量分類器對(duì)正樣本的預(yù)測(cè)能力,我們引入了精確率Precision和召回率Recall。

精確率表示預(yù)測(cè)結(jié)果中,預(yù)測(cè)為正樣本的樣本中,正確預(yù)測(cè)為正樣本的概率;召回率表示在原始樣本的正樣本中,最后被正確預(yù)測(cè)為正樣本的概率;

二者用混淆矩陣計(jì)算如下:

精確率和召回率往往是一對(duì)矛盾的指標(biāo)。在CTR預(yù)估問(wèn)題中,預(yù)測(cè)結(jié)果往往表示會(huì)被點(diǎn)擊的概率。如果我們對(duì)所有的預(yù)測(cè)結(jié)果進(jìn)行降序排序,排在前面的是學(xué)習(xí)器認(rèn)為最可能被點(diǎn)擊的樣本,排在后面的是學(xué)習(xí)期認(rèn)為最不可能被點(diǎn)擊的樣本。

如果我們?cè)O(shè)定一個(gè)閾值,在這個(gè)閾值之上的學(xué)習(xí)器認(rèn)為是正樣本,閾值之下的學(xué)習(xí)器認(rèn)為是負(fù)樣本。可以想象到的是,當(dāng)閾值很高時(shí),預(yù)測(cè)為正樣本的是分類器最有把握的一批樣本,此時(shí)精確率往往很高,但是召回率一般較低。相反,當(dāng)閾值很低時(shí),分類器把很多拿不準(zhǔn)的樣本都預(yù)測(cè)為了正樣本,此時(shí)召回率很高,但是精確率卻往往偏低。

1.4 F-1 Score

為了折中精確率和召回率的結(jié)果,我們又引入了F-1 Score,計(jì)算公式如下:

對(duì)于F1 Score有很多的變化形式,感興趣的話大家可以參考一下周志華老師的西瓜書,我們這里就不再介紹了。

1.5 ROC與AUC

在許多分類學(xué)習(xí)器中,產(chǎn)生的是一個(gè)概率預(yù)測(cè)值,然后將這個(gè)概率預(yù)測(cè)值與一個(gè)提前設(shè)定好的分類閾值進(jìn)行比較,大于該閾值則認(rèn)為是正例,小于該閾值則認(rèn)為是負(fù)例。如果對(duì)所有的排序結(jié)果按照概率值進(jìn)行降序排序,那么閾值可以將結(jié)果截?cái)酁閮刹糠郑懊娴恼J(rèn)為是正例,后面的認(rèn)為是負(fù)例。

我們可以根據(jù)實(shí)際任務(wù)的需要選取不同的閾值。如果重視精確率,我們可以設(shè)定一個(gè)很高的閾值,如果更重視召回率,可以設(shè)定一個(gè)很低的閾值。

到這里,我們會(huì)拋出兩個(gè)問(wèn)題:1)設(shè)定閾值然后再來(lái)計(jì)算精確率,召回率和F1-Score太麻煩了,這個(gè)閾值到底該設(shè)定為多少呢?有沒(méi)有可以不設(shè)定閾值來(lái)直接評(píng)價(jià)我們的模型性能的方法呢?

2)排序結(jié)果很重要呀,不管預(yù)測(cè)值是多少,只要正例的預(yù)測(cè)概率都大于負(fù)例的就好了呀。

沒(méi)錯(cuò),ROC和AUC便可以解決我們上面拋出的兩個(gè)問(wèn)題。

ROC全稱是“受試者工作特征”,(receiver operating characteristic)。我們根據(jù)學(xué)習(xí)器的預(yù)測(cè)結(jié)果進(jìn)行排序,然后按此順序逐個(gè)把樣本作為正例進(jìn)行預(yù)測(cè),每次計(jì)算出兩個(gè)重要的值,分別以這兩個(gè)值作為橫縱坐標(biāo)作圖,就得到了ROC曲線。

這兩個(gè)指標(biāo)是什么呢?是精確率和召回率么?并不是的,哈哈。

ROC曲線的橫軸為“假正例率”(True Positive Rate,TPR),又稱為“假陽(yáng)率”;縱軸為“真正例率”(False Positive Rate,FPR),又稱為“真陽(yáng)率”,

假陽(yáng)率,簡(jiǎn)單通俗來(lái)理解就是預(yù)測(cè)為正樣本但是預(yù)測(cè)錯(cuò)了的可能性,顯然,我們不希望該指標(biāo)太高。

真陽(yáng)率,則是代表預(yù)測(cè)為正樣本但是預(yù)測(cè)對(duì)了的可能性,當(dāng)然,我們希望真陽(yáng)率越高越好。

ROC計(jì)算過(guò)程如下:1)首先每個(gè)樣本都需要有一個(gè)label值,并且還需要一個(gè)預(yù)測(cè)的score值(取值0到1);2)然后按這個(gè)score對(duì)樣本由大到小進(jìn)行排序,假設(shè)這些數(shù)據(jù)位于表格中的一列,從上到下依次降序;3)現(xiàn)在從上到下按照樣本點(diǎn)的取值進(jìn)行劃分,位于分界點(diǎn)上面的我們把它歸為預(yù)測(cè)為正樣本,位于分界點(diǎn)下面的歸為負(fù)樣本;4)分別計(jì)算出此時(shí)的TPR和FPR,然后在圖中繪制(FPR, TPR)點(diǎn)。

說(shuō)這么多,不如直接看圖來(lái)的簡(jiǎn)單:

AUC(area under the curve)就是ROC曲線下方的面積,如下圖所示,陰影部分面積即為AUC的值:

AUC量化了ROC曲線表達(dá)的分類能力。這種分類能力是與概率、閾值緊密相關(guān)的,分類能力越好(AUC越大),那么輸出概率越合理,排序的結(jié)果越合理。

在CTR預(yù)估中,我們不僅希望分類器給出是否點(diǎn)擊的分類信息,更需要分類器給出準(zhǔn)確的概率值,作為排序的依據(jù)。所以,這里的AUC就直觀地反映了CTR的準(zhǔn)確性(也就是CTR的排序能力)。

終于介紹完了,那么這個(gè)值該怎么計(jì)算呢?

2、AUC的計(jì)算

關(guān)于AUC的計(jì)算方法,如果僅僅根據(jù)上面的描述,我們可能只能想到一種方法,那就是積分法,我們先來(lái)介紹這種方法,然后再來(lái)介紹其他的方法。

2.1 積分思維

這里的積分法其實(shí)就是我們之前介紹的繪制ROC曲線的過(guò)程,用代碼簡(jiǎn)單描述下:

auc = 0.0 height = 0.0 for each training example x_i, y_i: if y_i = 1.0: height = height + 1/(tp+fn) else auc += height * 1/(tn+fp) return auc

在上面的計(jì)算過(guò)程中,我們計(jì)算面積過(guò)程中隱含著一個(gè)假定,即所有樣本的預(yù)測(cè)概率值不想等,因此我們的面積可以由一個(gè)個(gè)小小的矩形拼起來(lái)。但如果有兩個(gè)或多個(gè)的預(yù)測(cè)值相同,我們調(diào)整一下閾值,得到的不是往上或者往右的延展,而是斜著向上形成一個(gè)梯形,此時(shí)計(jì)算梯形的面積就比較麻煩,因此這種方法其實(shí)并不是很常用。

2.2 Wilcoxon-Mann-Witney Test

關(guān)于AUC還有一個(gè)很有趣的性質(zhì),它和Wilcoxon-Mann-Witney是等價(jià)的,而Wilcoxon-Mann-Witney Test就是測(cè)試任意給一個(gè)正類樣本和一個(gè)負(fù)類樣本,正類樣本的score有多大的概率大于負(fù)類樣本的score。

根據(jù)這個(gè)定義我們可以來(lái)探討一下二者為什么是等價(jià)的?首先我們偷換一下概念,其實(shí)意思還是一樣的,任意給定一個(gè)負(fù)樣本,所有正樣本的score中有多大比例是大于該負(fù)類樣本的score?由于每個(gè)負(fù)類樣本的選中概率相同,那么Wilcoxon-Mann-Witney Test其實(shí)就是上面n2(負(fù)樣本的個(gè)數(shù))個(gè)比例的平均值。

那么對(duì)每個(gè)負(fù)樣本來(lái)說(shuō),有多少的正樣本的score比它的score大呢?是不是就是當(dāng)結(jié)果按照score排序,閾值恰好為該負(fù)樣本score時(shí)的真正例率TPR?沒(méi)錯(cuò),相信你的眼睛,是這樣的!理解到這一層,二者等價(jià)的關(guān)系也就豁然開(kāi)朗了。ROC曲線下的面積或者說(shuō)AUC的值 與 測(cè)試任意給一個(gè)正類樣本和一個(gè)負(fù)類樣本,正類樣本的score有多大的概率大于負(fù)類樣本的score

哈哈,那么我們只要計(jì)算出這個(gè)概率值就好了呀。我們知道,在有限樣本中我們常用的得到概率的辦法就是通過(guò)頻率來(lái)估計(jì)之。這種估計(jì)隨著樣本規(guī)模的擴(kuò)大而逐漸逼近真實(shí)值。樣本數(shù)越多,計(jì)算的AUC越準(zhǔn)確類似,也和計(jì)算積分的時(shí)候,小區(qū)間劃分的越細(xì),計(jì)算的越準(zhǔn)確是同樣的道理。具體來(lái)說(shuō)就是:統(tǒng)計(jì)一下所有的 M×N(M為正類樣本的數(shù)目,N為負(fù)類樣本的數(shù)目)個(gè)正負(fù)樣本對(duì)中,有多少個(gè)組中的正樣本的score大于負(fù)樣本的score。當(dāng)二元組中正負(fù)樣本的 score相等的時(shí)候,按照0.5計(jì)算。然后除以MN。公式表示如下:

實(shí)現(xiàn)這個(gè)方法的復(fù)雜度為O(n^2 )。n為樣本數(shù)(即n=M+N)

2.3 Wilcoxon-Mann-Witney Test的化簡(jiǎn)

該方法和上述第二種方法原理一樣,但復(fù)雜度降低了。首先對(duì)score從大到小排序,然后令最大score對(duì)應(yīng)的sample的rank值為n,第二大score對(duì)應(yīng)sample的rank值為n-1,以此類推從n到1。然后把所有的正類樣本的rank相加,再減去正類樣本的score為最小的那M個(gè)值的情況。得到的結(jié)果就是有多少對(duì)正類樣本的score值大于負(fù)類樣本的score值,最后再除以M×N即可。值得注意的是,當(dāng)存在score相等的時(shí)候,對(duì)于score相等的樣本,需要賦予相同的rank值(無(wú)論這個(gè)相等的score是出現(xiàn)在同類樣本還是不同類的樣本之間,都需要這樣處理)。具體操作就是再把所有這些score相等的樣本 的rank取平均。然后再使用上述公式。此公式描述如下:

有了這個(gè)公式,我們計(jì)算AUC就非常簡(jiǎn)單了,下一節(jié)我們會(huì)給出一個(gè)簡(jiǎn)單的Demo

3、AUC計(jì)算代碼示例

這一節(jié),我們給出一個(gè)AUC計(jì)算的小Demo,供大家參考:

import numpy as np label_all = np.random.randint(0,2,[10,1]).tolist() pred_all = np.random.random((10,1)).tolist() print(label_all) print(pred_all) posNum = len(list(filter(lambda s: s[0] == 1, label_all))) if (posNum > 0): negNum = len(label_all) - posNum sortedq = sorted(enumerate(pred_all), key=lambda x: x[1]) posRankSum = 0 for j in range(len(pred_all)): if (label_all[j][0] == 1): posRankSum += list(map(lambda x: x[0], sortedq)).index(j) + 1 auc = (posRankSum - posNum * (posNum + 1) / 2) / (posNum * negNum) print("auc:", auc)

輸出為:

[[1], [1], [1], [1], [0], [0], [1], [0], [1], [0]] [[0.3338126725065774], [0.916003907444231], [0.21214487870979226], [0.7598235037160891], [0.07060830328081447], [0.7650759555141832], [0.16157972737309945], [0.6526480840746645], [0.9327233203035652], [0.6581121768195201]] auc: 0.5833333333333334

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4290

    瀏覽量

    62342
  • 分類器
    +關(guān)注

    關(guān)注

    0

    文章

    152

    瀏覽量

    13165
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1202

    瀏覽量

    24623

原文標(biāo)題:推薦系統(tǒng)遇上深度學(xué)習(xí)(九)--評(píng)價(jià)指標(biāo)AUC原理及實(shí)踐

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    是否可以將彩信圖像用作壁紙?

    是否可以將彩信圖像用作壁紙?可以,通過(guò)彩信發(fā)送的圖像可用作壁紙。 打開(kāi)收到的彩信,查看所需的圖像,然后選擇選項(xiàng) > 圖像用途 > 設(shè)為壁紙。
    發(fā)表于 01-23 17:39

    *Alpha_State_Ptr()函數(shù)去分配任務(wù)有什么好處

    TI的很多例程中,會(huì)使用*Alpha_State_Ptr()函數(shù)去分配任務(wù),這樣做有什么好處?
    發(fā)表于 10-29 11:45

    TensorFlow損失函數(shù)(定義和使用)詳解

    了如何實(shí)現(xiàn)不同類型的損失函數(shù)。那么根據(jù)手頭的回歸任務(wù),你可以選擇相應(yīng)的損失函數(shù)或設(shè)計(jì)自己的損失
    發(fā)表于 07-28 14:38

    怎樣使用S函數(shù)去編寫SHEPWM的發(fā)波?

    S函數(shù)是什么?S函數(shù)有什么優(yōu)點(diǎn)?SHEPWM發(fā)波函數(shù)分為哪幾個(gè)函數(shù)?怎樣使用S函數(shù)去編寫SHEPWM的發(fā)波?
    發(fā)表于 07-09 08:48

    如何使用HAL庫(kù)函數(shù)去實(shí)現(xiàn)獨(dú)立看門狗的功能

    IWDG的主要性能有哪些?如何使用HAL庫(kù)函數(shù)去實(shí)現(xiàn)獨(dú)立看門狗的功能?
    發(fā)表于 08-27 06:31

    如何使用庫(kù)函數(shù)去配置STM32F4外部中斷

    STM32F4是怎么把16個(gè)中斷線和IO口一一對(duì)應(yīng)起來(lái)的?如何使用庫(kù)函數(shù)去配置STM32F4外部中斷?
    發(fā)表于 10-19 09:59

    怎樣用printf 函數(shù)和getchar 函數(shù)去簡(jiǎn)化STM32串口數(shù)據(jù)的傳輸

    printf 函數(shù)和getchar 函數(shù)有何功能?怎樣用printf 函數(shù)和getchar 函數(shù)去簡(jiǎn)化STM32串口數(shù)據(jù)的傳輸
    發(fā)表于 10-22 07:49

    如何使用固件庫(kù)函數(shù)去點(diǎn)亮LED

    新建固件庫(kù)工程里面都有哪些文件?如何使用固件庫(kù)函數(shù)去點(diǎn)亮LED
    發(fā)表于 11-30 06:41

    為什么使用printf()函數(shù)去調(diào)試STM32串口卻無(wú)法接收正確數(shù)據(jù)

    為什么使用printf()函數(shù)去調(diào)試STM32串口無(wú)法接收正確數(shù)據(jù)?如何去解決這個(gè)問(wèn)題
    發(fā)表于 11-30 07:15

    怎樣使用Sprintf函數(shù)去代替printf函數(shù)

    為什么要去重定義Sprintf函數(shù)?怎樣使用Sprintf函數(shù)去代替printf函數(shù)?
    發(fā)表于 11-30 07:32

    如何利用LCD_Color_Fill() 庫(kù)函數(shù)去顯示圖片

    怎樣去使用stm32F407的LCD_Color_Fill() 庫(kù)函數(shù)?如何利用LCD_Color_Fill() 庫(kù)函數(shù)去顯示圖片?
    發(fā)表于 02-21 06:15

    三種常見(jiàn)的損失函數(shù)和兩種常用的激活函數(shù)介紹和可視化

    從上面闡釋的步驟可以看出,神經(jīng)網(wǎng)絡(luò)中的權(quán)重由損失函數(shù)的導(dǎo)數(shù)而不是損失函數(shù)本身來(lái)進(jìn)行更新或反向傳播。因此,
    的頭像 發(fā)表于 05-05 11:42 ?7041次閱讀
    三種常見(jiàn)的<b class='flag-5'>損失</b><b class='flag-5'>函數(shù)</b>和兩種常用的激活<b class='flag-5'>函數(shù)</b>介紹和可視化

    基于下界函數(shù)的最優(yōu)化這樣一種優(yōu)化思路

    在有些情況下,我們知道目標(biāo)函數(shù)的表達(dá)形式,但因?yàn)槟繕?biāo)函數(shù)形式復(fù)雜不方便對(duì)變量直接求導(dǎo)。這個(gè)時(shí)候可以嘗試找到目標(biāo)函數(shù)的一個(gè)下界
    的頭像 發(fā)表于 07-13 08:09 ?2521次閱讀
    基于下界<b class='flag-5'>函數(shù)</b>的最<b class='flag-5'>優(yōu)化</b>這樣一種<b class='flag-5'>優(yōu)化</b>思路

    計(jì)算機(jī)視覺(jué)的損失函數(shù)是什么?

    損失函數(shù)在模型的性能中起著關(guān)鍵作用。選擇正確的損失函數(shù)可以幫助你的模型學(xué)習(xí)如何將注意力集中在數(shù)據(jù)中的正確特征集合上,從而獲得最優(yōu)和更快的收斂
    的頭像 發(fā)表于 03-13 16:30 ?3537次閱讀
    計(jì)算機(jī)視覺(jué)的<b class='flag-5'>損失</b><b class='flag-5'>函數(shù)</b>是什么?

    損失函數(shù)的簡(jiǎn)要介紹

    例如,你有一個(gè)神經(jīng)網(wǎng)絡(luò),通過(guò)該網(wǎng)絡(luò)可以獲取一些與房屋有關(guān)的數(shù)據(jù)并預(yù)測(cè)其價(jià)格。在這種情況下,你可以使用MSE(均方誤差)損失?;旧?,在輸出為實(shí)數(shù)的情況下,應(yīng)使用此損失
    的頭像 發(fā)表于 04-17 10:01 ?3592次閱讀