1.非均衡分類問題在大多數(shù)情況下不同類別的分類代價并不相等,即將樣本分類為正例或反例的代價是不能相提并論的。例如在垃圾郵件過濾中,我們希望重要的郵件永遠不要被誤判為垃圾郵件,還有在癌癥檢測中,寧愿誤判也不漏判。在這種情況下,僅僅使用分類錯誤率來度量是不充分的,這樣的度量錯誤掩蓋了樣例如何被錯分的事實。所以,在分類中,當某個類別的重要性高于其他類別時,可以使用Precison和Recall多個比分類錯誤率更好的新指標。 Precison(查準率):預(yù)測為正例的樣本中真正正例的比例。 Recall(召回率):真正為正例的樣本有多少被預(yù)測出來。 可見,我們可以根據(jù)我們最終的目標來選擇度量指標。例如,在癌癥檢測中,我們希望選擇Recall較高的模型(有病為正例)。而在垃圾郵件過濾中,我們希望選擇Precison較高的模型。但是我們很容易構(gòu)造一個高查準率或高召回率的分類器,但是很難保證兩者同時成立。構(gòu)建一個同時使兩者很大的分類器是具有挑戰(zhàn)性的。 2.ROC曲線ROC是一個用于度量分類中的非均衡性的工具,ROC曲線及AUC常被用來評價一個二值分類器的優(yōu)劣。 既然已經(jīng)有了這么多的評價指標,為什么還要使用ROC與AUC呢? 因為ROC曲線有一個很好的特征:在實際的數(shù)據(jù)集中經(jīng)常會出現(xiàn)類別不平衡現(xiàn)象,即負樣本比正樣本多很多(或者相反),而且測試數(shù)據(jù)中的正負樣本的分布也可能隨著時間而變化。而在這種情況下,ROC曲線能夠保持不變。下圖是ROC曲線和Precison-Recall曲線的對比: 在上圖中,a和c為ROC曲線,b和d為Precison和Recall曲線。a和b展示的是在原始測試集(正負樣本平衡)的結(jié)果,c和d是將測試集中負樣本的數(shù)量變?yōu)樵瓉淼?0倍后分類器的結(jié)果??梢钥闯?,曲線基本保持不變,而Precison和Recall變化較大。 2.2 ROC曲線的定義(Receiver Operating Characteristic)ROC可以用來比較不同分類器的相關(guān)性能。 如圖是一個ROC曲線的實例。 其中橫坐標為FPR(False positive rate 假陽率),縱坐標為真陽率TPR(True postive rate)。 FPR:所有負例中有多少被預(yù)測為正例; TPR:有多少真正的正例被預(yù)測出來; ROC 描繪了兩者的相對權(quán)衡:
下圖給出了Precison,Recall, FPR,TPR的定義: F-measure: precison和recall的調(diào)和平均值。沒有一個單個的度量可以告訴所有的信息,所以建議使用多個度量。 接下來我們考慮ROC曲線中的四個點和一條線。 1.(0,0):fp=tp=0 ,即所有樣本都被預(yù)測為負樣本; 2.(1,1):fp=tp=1,所有樣本都被預(yù)測為正樣本; 3.(1,0):fp=1,tp=0,所有正例都被預(yù)測為負例,而所有正例都沒被預(yù)測出來,這時最糟糕的分類器,因為它成功的避開了所有正確答案。 4.(0,1):fp=0,tp=1,這是一個完美的分類器,它將所有樣本都正確分類。 所以經(jīng)過上述分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好,意味著分類器在假陽率很低的同時獲得了很高的真陽率。 5. 虛線y=x:這條對角線熵的點其實代表的是一個采用隨機猜測策略的分類器的結(jié)果。例如(0.5,0.5),表示對于一半的樣本猜測其為正樣本,另外一半樣本為負樣本。出現(xiàn)在右下角三角形中的任何分類器都比隨機猜測更糟糕。因此,在ROC圖中,此三角形通常為空。 3.AUC的含義AUC(Area Under Curve) 被定義為ROC曲線下的面積,因為ROC曲線一般都處于y=x這條直線的上方,所以取值范圍在0.5和1之間,使用AUC作為評價指標是因為ROC曲線在很多時候并不能清晰地說明哪個分類器的效果更好,而AUC作為一個數(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是一個概率值,當隨機挑選一個正樣本以及一個負樣本,當前的分類算法根據(jù)計算得到的分數(shù)將這個正樣本排在負樣本前面的概率就是AUC值。所以,AUC的值越大,當前的分類算法越有可能將正樣本排在負樣本值前面,既能夠更好的分類。 4. ROC曲線的繪制我們可以看出,對于一個特定的分類器和測試數(shù)據(jù)集,顯然只能得到一個分類結(jié)果,即一組FPR和TPR的結(jié)果,那么是如何得到整個ROC曲線的呢? 要想得到ROC曲線,我們就需要一組FPR和TPR的值。我們先來看Wikipedia上面對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曲線代表的是當“discriminative threshold“變化時分類器的性能、如何理解這里的“discriminative threshold”呢? 它代表的是分類器以多大的置信度將樣本分類為正樣本。分類器的一個重要功能”概率輸出“,即表示分類器認為某個樣本具有多大的概率屬于正樣本(或負樣本)。通過深入地了解各個分類器的內(nèi)部機理,我們總能想辦法得到一種概率輸出。通常來說,是將一個實數(shù)范圍通過某個變化映射到(0,1)區(qū)間。 假設(shè)我們已經(jīng)得到了所有樣本的概率輸出(即屬于正樣本的概率),那么我們就可以通過改變”discrimination threshold“來繪制ROC曲線。 (許多分類器,例如決策樹或者規(guī)則集合,被設(shè)計產(chǎn)生一個類別決策,即將每個樣本預(yù)測為Y或N。當使用這樣的離散分類器時,產(chǎn)生一個單個額confusion矩陣,對應(yīng)于一個ROC點。而一些分類器,例如Naive Bayes,產(chǎn)生一個樣本概率值,這樣一個ranking/scoring分類器可以使用一個threshold來產(chǎn)生一個discrete(binary)分類器:如果分類器輸出的概率大于threshold,分類器產(chǎn)生Y,否則產(chǎn)生N。每個不同的threshold值在ROC空間產(chǎn)生一個不同的點(對應(yīng)于一個不同的confusion matrix)。)
具體過程如下所述: 1.如圖,我們根據(jù)每個測試樣本屬于正樣本的概率值score從大到小排序。(圖中class一欄代表每個測試樣本的真正標簽(p代表正樣本,n代表負樣本)) 2.接著,我們從高到低,依次將score作為閾值threshold,當測試樣本屬于正樣本的概率大于或等于這個threshold時,我們認為它為正樣本,否則為負樣本。 例如:對于第四個樣本,其score值為0.6,那么score值大于等于0.6的樣本1,2,3,4都被認為是正樣本,而其他樣本則被認為是負樣本。 3.每次選取不同的score作為threshold,我們就可以得到一組FPR和TPR,即曲線上的一點。將這些(FPR,TPR)對連接起來,就可以得到完整的ROC曲線如下圖。(當threshold取值越多,ROC曲線就越平滑)。 當我們將threshold設(shè)置為1和0時,即分別對應(yīng)將所有樣本劃分為負樣本和將所有樣本劃分為正樣本,就可以的得到曲線上的(0,0)和(1,1)兩點。 關(guān)于score值:分類器都會提供每個樣例被判為陽性或者陰性的可信程度值,大多數(shù)分類器都能夠做到這一點,但是在通常情況下,這些值會在最后輸出離散分類標簽之前被清除。例如,樸素貝葉斯能夠提供一個可能值,在Logistic回歸中輸入到sigmoid函數(shù)中的是一個數(shù)值。在Adaboost和SVM中,都會計算一個數(shù)值然后輸入到sign()函數(shù)中,所有的這些值都可以看做score,用于衡量給定分類器的預(yù)測強度。 ROC點(0.1,0.5)產(chǎn)生了最高的準確率。注意到分類器的最好的準確率出現(xiàn)在threshold=0.54時,而不是我們認為的在類別平衡分布的threshold等于0.5處。 4.1 Convex Hull陰影區(qū)域被稱作兩個曲線的convex hull。在選擇分類器時總是應(yīng)該根據(jù)convex hull的上邊界進行操作。例如,如果你的目標只是覆蓋40%的真陽性,你應(yīng)該選擇方法A,這樣可以提供5%的更低的假陽性率相對于B來說。如果你的目標是覆蓋80%的真陽性,你應(yīng)該選擇方法B,因為B的假陽性率為60%,與A相比更低。如果你的目標是覆蓋60%的真陽性,那么你應(yīng)該結(jié)合A和B。 5. 準確性的不足(代價敏感學(xué)習(xí))在金融檢測中,如果將欺詐用戶誤判為優(yōu)質(zhì)客戶,這樣會給企業(yè)帶來巨大損失。同樣把病人誤判為健康的人,會給病人帶來生命威脅,這些問題都是代價敏感分類問題。即將樣本誤分類為正樣本和將樣本誤分類為負樣本的代價是不同的。然而,許多傳統(tǒng)的分類算法假定分類代價都是相等的,分類的時候一般就考慮怎么使得分類模型的準確率更高,這樣就可能忽視掉分類代價的問題。但是往往分類代價相比分類準確率具有更加重要的意義。正如上面的例子,欺詐用戶和有病的人一般是小類別樣本,將它們進行正確分類更為重要,如果將它們誤分類將會產(chǎn)生嚴重的后果,我們的目標就是檢查出這些異常。 傳統(tǒng)的分類算法不適合解決代價敏感的問題,這就需要研究能夠解決代價敏感問題的分類方法,所以可以在傳統(tǒng)分類方法中引入代價因子,運用代價敏感學(xué)習(xí)減少分類代價。成本矩陣 基于損失的分類: 對于每個樣本E,分類器計算 MetaCost(代價敏感學(xué)習(xí)):MetaCost是一種典型的集成學(xué)習(xí)算法,其核心思想是計算出每個訓(xùn)練樣本額預(yù)測分類概率,再根據(jù)最優(yōu)分類期望代價重標記原訓(xùn)練樣本的類標號,得到新的訓(xùn)練集,然后在新的訓(xùn)練集上重新運行目標分類算法進行訓(xùn)練,從而實現(xiàn)代價敏感分類。
6. ROC曲線的python代碼實現(xiàn)
代碼解釋: 上述程序中的函數(shù)有兩個輸入?yún)?shù),第一個參數(shù)就代表的是score,代表的是分類器的預(yù)測強度。第二個參數(shù)是classLabels,即樣本真實的類標簽。首先創(chuàng)建一個浮點數(shù)二元組cur,將它初始化為(0.0,0.0),代表從坐標點(0.0,0.0)開始繪制ROC曲線。接著通過數(shù)組過濾的方式計算正例的數(shù)目,并將該值賦給numPosClas,該值確定了在y坐標軸上的步進數(shù)目。(因為y軸的含義是有多少正例被預(yù)測出來,所以它的長度為正例的數(shù)目),相應(yīng)的,也可以得到x軸的步長。 接下來,我們將score從大到小排序得到排序索引,因為threshold是從大到小設(shè)置。所以最開始threshold為1.0,即所有樣本都被預(yù)測為負例,因此是從點(0,0)開始繪制。當在循環(huán)中遍歷坐標點時,每當?shù)玫揭粋€類別為1的樣本,那么就要沿著y軸增加一個步長,即增加真陽率。對于類別為0的樣本,則沿著x軸增加一個步長,增加假陽率。一旦確定了是在哪個軸的方向熵進行移動的,就可以在當前點和新點之間畫出一條線段,再更新坐標點cur。 (例如,對與樣本點1,當前threshold為0.9,即score大于等于0.9的樣本為正,小于為負,那么樣本點1就被預(yù)測為正,而該樣本的真實標簽也為正,所以真陽率+1。同理,當遍歷到樣本3時,threshold設(shè)為0.7,此時樣本3被預(yù)測為正例,但是該樣本其實為負例,所以假陽率+1,代表又一個負樣本被誤判為正例。) 為了計算,我們需要對多個小矩形的面積進行累加。這些小矩形的寬度是xStep,因此我們可以對所有矩形的高度進行累加,所有高度的和隨著x軸的每次移動而依次增加,然后再乘以xStep得到總面積。 運行結(jié)果:
|
|