乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ROC及AUC計(jì)算方法及原理

       流水晨香 2019-04-20

      1.非均衡分類問(wèn)題

      在大多數(shù)情況下不同類別的分類代價(jià)并不相等,即將樣本分類為正例或反例的代價(jià)是不能相提并論的。例如在垃圾郵件過(guò)濾中,我們希望重要的郵件永遠(yuǎn)不要被誤判為垃圾郵件,還有在癌癥檢測(cè)中,寧愿誤判也不漏判。在這種情況下,僅僅使用分類錯(cuò)誤率來(lái)度量是不充分的,這樣的度量錯(cuò)誤掩蓋了樣例如何被錯(cuò)分的事實(shí)。所以,在分類中,當(dāng)某個(gè)類別的重要性高于其他類別時(shí),可以使用Precison和Recall多個(gè)比分類錯(cuò)誤率更好的新指標(biāo)。

      Precison(查準(zhǔn)率):預(yù)測(cè)為正例的樣本中真正正例的比例。

      Recall(召回率):真正為正例的樣本有多少被預(yù)測(cè)出來(lái)。

      可見(jiàn),我們可以根據(jù)我們最終的目標(biāo)來(lái)選擇度量指標(biāo)。例如,在癌癥檢測(cè)中,我們希望選擇Recall較高的模型(有病為正例)。而在垃圾郵件過(guò)濾中,我們希望選擇Precison較高的模型。但是我們很容易構(gòu)造一個(gè)高查準(zhǔn)率或高召回率的分類器,但是很難保證兩者同時(shí)成立。構(gòu)建一個(gè)同時(shí)使兩者很大的分類器是具有挑戰(zhàn)性的。

      2.ROC曲線

      ROC是一個(gè)用于度量分類中的非均衡性的工具,ROC曲線及AUC常被用來(lái)評(píng)價(jià)一個(gè)二值分類器的優(yōu)劣。

      既然已經(jīng)有了這么多的評(píng)價(jià)指標(biāo),為什么還要使用ROC與AUC呢?

      因?yàn)镽OC曲線有一個(gè)很好的特征:在實(shí)際的數(shù)據(jù)集中經(jīng)常會(huì)出現(xiàn)類別不平衡現(xiàn)象,即負(fù)樣本比正樣本多很多(或者相反),而且測(cè)試數(shù)據(jù)中的正負(fù)樣本的分布也可能隨著時(shí)間而變化。而在這種情況下,ROC曲線能夠保持不變。下圖是ROC曲線和Precison-Recall曲線的對(duì)比:

      ROC?2?o? vs. Precision-Recall?2?o?

      在上圖中,a和c為ROC曲線,b和d為Precison和Recall曲線。a和b展示的是在原始測(cè)試集(正負(fù)樣本平衡)的結(jié)果,c和d是將測(cè)試集中負(fù)樣本的數(shù)量變?yōu)樵瓉?lái)的10倍后分類器的結(jié)果。可以看出,曲線基本保持不變,而Precison和Recall變化較大。

      2.2 ROC曲線的定義(Receiver Operating Characteristic)

      ROC可以用來(lái)比較不同分類器的相關(guān)性能。

      ROC?2?o??¤o??

      如圖是一個(gè)ROC曲線的實(shí)例。

      其中橫坐標(biāo)為FPR(False positive rate 假陽(yáng)率),縱坐標(biāo)為真陽(yáng)率TPR(True postive rate)。

      FPR:所有負(fù)例中有多少被預(yù)測(cè)為正例; TPR:有多少真正的正例被預(yù)測(cè)出來(lái);

      ROC 描繪了兩者的相對(duì)權(quán)衡:

      • benefits(true postives)
      • costs(false positives)

      下圖給出了Precison,Recall, FPR,TPR的定義:

      FPR?TPR???1

      F-measure: precison和recall的調(diào)和平均值。沒(méi)有一個(gè)單個(gè)的度量可以告訴所有的信息,所以建議使用多個(gè)度量。

      接下來(lái)我們考慮ROC曲線中的四個(gè)點(diǎn)和一條線。

      1.(0,0):fp=tp=0 ,即所有樣本都被預(yù)測(cè)為負(fù)樣本;

      2.(1,1):fp=tp=1,所有樣本都被預(yù)測(cè)為正樣本;

      3.(1,0):fp=1,tp=0,所有正例都被預(yù)測(cè)為負(fù)例,而所有正例都沒(méi)被預(yù)測(cè)出來(lái),這時(shí)最糟糕的分類器,因?yàn)樗晒Φ谋荛_(kāi)了所有正確答案。

      4.(0,1):fp=0,tp=1,這是一個(gè)完美的分類器,它將所有樣本都正確分類。

      所以經(jīng)過(guò)上述分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好,意味著分類器在假陽(yáng)率很低的同時(shí)獲得了很高的真陽(yáng)率。

      5.   虛線y=x:這條對(duì)角線熵的點(diǎn)其實(shí)代表的是一個(gè)采用隨機(jī)猜測(cè)策略的分類器的結(jié)果。例如(0.5,0.5),表示對(duì)于一半的樣本猜測(cè)其為正樣本,另外一半樣本為負(fù)樣本。出現(xiàn)在右下角三角形中的任何分類器都比隨機(jī)猜測(cè)更糟糕。因此,在ROC圖中,此三角形通常為空。

      3.AUC的含義

      AUC(Area Under Curve) 被定義為ROC曲線下的面積,因?yàn)镽OC曲線一般都處于y=x這條直線的上方,所以取值范圍在0.5和1之間,使用AUC作為評(píng)價(jià)指標(biāo)是因?yàn)镽OC曲線在很多時(shí)候并不能清晰地說(shuō)明哪個(gè)分類器的效果更好,而AUC作為一個(gè)數(shù)值,其值越大代表分類器效果更好。

      AUC意味著什么?

      The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

      首先AUC是一個(gè)概率值,當(dāng)隨機(jī)挑選一個(gè)正樣本以及一個(gè)負(fù)樣本,當(dāng)前的分類算法根據(jù)計(jì)算得到的分?jǐn)?shù)將這個(gè)正樣本排在負(fù)樣本前面的概率就是AUC值。所以,AUC的值越大,當(dāng)前的分類算法越有可能將正樣本排在負(fù)樣本值前面,既能夠更好的分類。

      4. ROC曲線的繪制

      我們可以看出,對(duì)于一個(gè)特定的分類器和測(cè)試數(shù)據(jù)集,顯然只能得到一個(gè)分類結(jié)果,即一組FPR和TPR的結(jié)果,那么是如何得到整個(gè)ROC曲線的呢?

      要想得到ROC曲線,我們就需要一組FPR和TPR的值。我們先來(lái)看Wikipedia上面對(duì)ROC曲線的定義:

      “In signal detection theory, a receiver oprating characteristic(ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.”

      ROC曲線代表的是當(dāng)“discriminative threshold“變化時(shí)分類器的性能、如何理解這里的“discriminative threshold”呢?

      它代表的是分類器以多大的置信度將樣本分類為正樣本。分類器的一個(gè)重要功能”概率輸出“,即表示分類器認(rèn)為某個(gè)樣本具有多大的概率屬于正樣本(或負(fù)樣本)。通過(guò)深入地了解各個(gè)分類器的內(nèi)部機(jī)理,我們總能想辦法得到一種概率輸出。通常來(lái)說(shuō),是將一個(gè)實(shí)數(shù)范圍通過(guò)某個(gè)變化映射到(0,1)區(qū)間。

      假設(shè)我們已經(jīng)得到了所有樣本的概率輸出(即屬于正樣本的概率),那么我們就可以通過(guò)改變”discrimination threshold“來(lái)繪制ROC曲線。

      (許多分類器,例如決策樹(shù)或者規(guī)則集合,被設(shè)計(jì)產(chǎn)生一個(gè)類別決策,即將每個(gè)樣本預(yù)測(cè)為Y或N。當(dāng)使用這樣的離散分類器時(shí),產(chǎn)生一個(gè)單個(gè)額confusion矩陣,對(duì)應(yīng)于一個(gè)ROC點(diǎn)。而一些分類器,例如Naive Bayes,產(chǎn)生一個(gè)樣本概率值,這樣一個(gè)ranking/scoring分類器可以使用一個(gè)threshold來(lái)產(chǎn)生一個(gè)discrete(binary)分類器:如果分類器輸出的概率大于threshold,分類器產(chǎn)生Y,否則產(chǎn)生N。每個(gè)不同的threshold值在ROC空間產(chǎn)生一個(gè)不同的點(diǎn)(對(duì)應(yīng)于一個(gè)不同的confusion matrix)。)

       

      具體過(guò)程如下所述:

      ??§?|???o

      1.如圖,我們根據(jù)每個(gè)測(cè)試樣本屬于正樣本的概率值score從大到小排序。(圖中class一欄代表每個(gè)測(cè)試樣本的真正標(biāo)簽(p代表正樣本,n代表負(fù)樣本))

      2.接著,我們從高到低,依次將score作為閾值threshold,當(dāng)測(cè)試樣本屬于正樣本的概率大于或等于這個(gè)threshold時(shí),我們認(rèn)為它為正樣本,否則為負(fù)樣本。

      例如:對(duì)于第四個(gè)樣本,其score值為0.6,那么score值大于等于0.6的樣本1,2,3,4都被認(rèn)為是正樣本,而其他樣本則被認(rèn)為是負(fù)樣本。

      3.每次選取不同的score作為threshold,我們就可以得到一組FPR和TPR,即曲線上的一點(diǎn)。將這些(FPR,TPR)對(duì)連接起來(lái),就可以得到完整的ROC曲線如下圖。(當(dāng)threshold取值越多,ROC曲線就越平滑)。

      ROC?2?o??????

      當(dāng)我們將threshold設(shè)置為1和0時(shí),即分別對(duì)應(yīng)將所有樣本劃分為負(fù)樣本和將所有樣本劃分為正樣本,就可以的得到曲線上的(0,0)和(1,1)兩點(diǎn)。

      關(guān)于score值:分類器都會(huì)提供每個(gè)樣例被判為陽(yáng)性或者陰性的可信程度值,大多數(shù)分類器都能夠做到這一點(diǎn),但是在通常情況下,這些值會(huì)在最后輸出離散分類標(biāo)簽之前被清除。例如,樸素貝葉斯能夠提供一個(gè)可能值,在Logistic回歸中輸入到sigmoid函數(shù)中的是一個(gè)數(shù)值。在Adaboost和SVM中,都會(huì)計(jì)算一個(gè)數(shù)值然后輸入到sign()函數(shù)中,所有的這些值都可以看做score,用于衡量給定分類器的預(yù)測(cè)強(qiáng)度。

       ROC點(diǎn)(0.1,0.5)產(chǎn)生了最高的準(zhǔn)確率。注意到分類器的最好的準(zhǔn)確率出現(xiàn)在threshold=0.54時(shí),而不是我們認(rèn)為的在類別平衡分布的threshold等于0.5處。

      4.1 Convex Hull

       

       

      陰影區(qū)域被稱作兩個(gè)曲線的convex hull。在選擇分類器時(shí)總是應(yīng)該根據(jù)convex hull的上邊界進(jìn)行操作。例如,如果你的目標(biāo)只是覆蓋40%的真陽(yáng)性,你應(yīng)該選擇方法A,這樣可以提供5%的更低的假陽(yáng)性率相對(duì)于B來(lái)說(shuō)。如果你的目標(biāo)是覆蓋80%的真陽(yáng)性,你應(yīng)該選擇方法B,因?yàn)锽的假陽(yáng)性率為60%,與A相比更低。如果你的目標(biāo)是覆蓋60%的真陽(yáng)性,那么你應(yīng)該結(jié)合A和B。

      5. 準(zhǔn)確性的不足(代價(jià)敏感學(xué)習(xí)

      在金融檢測(cè)中,如果將欺詐用戶誤判為優(yōu)質(zhì)客戶,這樣會(huì)給企業(yè)帶來(lái)巨大損失。同樣把病人誤判為健康的人,會(huì)給病人帶來(lái)生命威脅,這些問(wèn)題都是代價(jià)敏感分類問(wèn)題。即將樣本誤分類為正樣本和將樣本誤分類為負(fù)樣本的代價(jià)是不同的。然而,許多傳統(tǒng)的分類算法假定分類代價(jià)都是相等的,分類的時(shí)候一般就考慮怎么使得分類模型的準(zhǔn)確率更高,這樣就可能忽視掉分類代價(jià)的問(wèn)題。但是往往分類代價(jià)相比分類準(zhǔn)確率具有更加重要的意義。正如上面的例子,欺詐用戶和有病的人一般是小類別樣本,將它們進(jìn)行正確分類更為重要,如果將它們誤分類將會(huì)產(chǎn)生嚴(yán)重的后果,我們的目標(biāo)就是檢查出這些異常。

      傳統(tǒng)的分類算法不適合解決代價(jià)敏感的問(wèn)題,這就需要研究能夠解決代價(jià)敏感問(wèn)題的分類方法,所以可以在傳統(tǒng)分類方法中引入代價(jià)因子,運(yùn)用代價(jià)敏感學(xué)習(xí)減少分類代價(jià)。成本矩陣Cost(i,j)表示將i類樣本誤分類為類j的代價(jià)。代價(jià)敏感分類就是為不同類型的錯(cuò)誤分類不同的代價(jià),使得分類時(shí),高代價(jià)錯(cuò)誤產(chǎn)生的數(shù)量和錯(cuò)誤分類的代價(jià)總和最小。

      基于損失的分類:

      對(duì)于每個(gè)樣本E,分類器計(jì)算p(y|E) 和 p(n|E)=1-p(y|E),分類器將樣本分類為正例當(dāng):

      p(y|E)>\frac{p(n|E)*c(Y,n)}{c(N,y)}

      MetaCost(代價(jià)敏感學(xué)習(xí)):MetaCost是一種典型的集成學(xué)習(xí)算法,其核心思想是計(jì)算出每個(gè)訓(xùn)練樣本額預(yù)測(cè)分類概率,再根據(jù)最優(yōu)分類期望代價(jià)重標(biāo)記原訓(xùn)練樣本的類標(biāo)號(hào),得到新的訓(xùn)練集,然后在新的訓(xùn)練集上重新運(yùn)行目標(biāo)分類算法進(jìn)行訓(xùn)練,從而實(shí)現(xiàn)代價(jià)敏感分類。

       

      6. ROC曲線的python代碼實(shí)現(xiàn)

      1. def plotROC(predStrengths, classLabels):
      2. cur=(0.0, 0.0)
      3. numPosClass = np.sum(np.array(classLabels) == 1.0)
      4. yStep = 1.0/numPosClass
      5. xStep = 1.0/(len(classLabels)-numPosClass)
      6. print(np.array(predStrengths.flatten()))
      7. sortedIndicies = np.argsort(-np.array(predStrengths.flatten()))
      8. print(sortedIndicies)
      9. fig = plt.figure()
      10. fig.clf()
      11. ySum = 0.0
      12. ax = plt.subplot(111)
      13. for index in sortedIndicies:
      14. if classLabels[index] == 1.0:
      15. delY = yStep; delX=0
      16. else:
      17. delY = 0; delX = xStep
      18. ySum += cur[1]
      19. ax.plot([cur[0], cur[0]+delX], [cur[1], cur[1]+delY], c='b')
      20. cur = (cur[0]+delX, cur[1]+delY)
      21. print(cur)
      22. ax.plot([0, 1], [0, 1], 'b--')
      23. ax.axis([0, 1, 0, 1])
      24. plt.xlabel('False Positve Rate')
      25. plt.ylabel('True Postive Rate')
      26. plt.title('ROC curve for AdaBoost Horse Colic Detection System')
      27. ax.axis([0, 1, 0, 1])
      28. plt.show()
      29. print('the Area under the curve is:', ySum*xStep)

      代碼解釋:

      上述程序中的函數(shù)有兩個(gè)輸入?yún)?shù),第一個(gè)參數(shù)就代表的是score,代表的是分類器的預(yù)測(cè)強(qiáng)度。第二個(gè)參數(shù)是classLabels,即樣本真實(shí)的類標(biāo)簽。首先創(chuàng)建一個(gè)浮點(diǎn)數(shù)二元組cur,將它初始化為(0.0,0.0),代表從坐標(biāo)點(diǎn)(0.0,0.0)開(kāi)始繪制ROC曲線。接著通過(guò)數(shù)組過(guò)濾的方式計(jì)算正例的數(shù)目,并將該值賦給numPosClas,該值確定了在y坐標(biāo)軸上的步進(jìn)數(shù)目。(因?yàn)閥軸的含義是有多少正例被預(yù)測(cè)出來(lái),所以它的長(zhǎng)度為正例的數(shù)目),相應(yīng)的,也可以得到x軸的步長(zhǎng)。

      接下來(lái),我們將score從大到小排序得到排序索引,因?yàn)閠hreshold是從大到小設(shè)置。所以最開(kāi)始threshold為1.0,即所有樣本都被預(yù)測(cè)為負(fù)例,因此是從點(diǎn)(0,0)開(kāi)始繪制。當(dāng)在循環(huán)中遍歷坐標(biāo)點(diǎn)時(shí),每當(dāng)?shù)玫揭粋€(gè)類別為1的樣本,那么就要沿著y軸增加一個(gè)步長(zhǎng),即增加真陽(yáng)率。對(duì)于類別為0的樣本,則沿著x軸增加一個(gè)步長(zhǎng),增加假陽(yáng)率。一旦確定了是在哪個(gè)軸的方向熵進(jìn)行移動(dòng)的,就可以在當(dāng)前點(diǎn)和新點(diǎn)之間畫(huà)出一條線段,再更新坐標(biāo)點(diǎn)cur。

      (例如,對(duì)與樣本點(diǎn)1,當(dāng)前threshold為0.9,即score大于等于0.9的樣本為正,小于為負(fù),那么樣本點(diǎn)1就被預(yù)測(cè)為正,而該樣本的真實(shí)標(biāo)簽也為正,所以真陽(yáng)率+1。同理,當(dāng)遍歷到樣本3時(shí),threshold設(shè)為0.7,此時(shí)樣本3被預(yù)測(cè)為正例,但是該樣本其實(shí)為負(fù)例,所以假陽(yáng)率+1,代表又一個(gè)負(fù)樣本被誤判為正例。)

      為了計(jì)算,我們需要對(duì)多個(gè)小矩形的面積進(jìn)行累加。這些小矩形的寬度是xStep,因此我們可以對(duì)所有矩形的高度進(jìn)行累加,所有高度的和隨著x軸的每次移動(dòng)而依次增加,然后再乘以xStep得到總面積。

      運(yùn)行結(jié)果:

       

       

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多