日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

auc-roc

發布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 auc-roc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://bubblexc.com/y2011/148/

很多時候,我們希望對一個二值分類器的性能進行評價,AUC正是這樣一種用來度量分類模型好壞的一個標準。現實中樣本在不同類別上的不均衡分布(class distribution imbalance problem),使得accuracy這樣的傳統的度量標準不能恰當的反應分類器的性能。舉個例子:測試樣本中有A類樣本90個,B 類樣本10個。若某個分類器簡單的將所有樣本都劃分成A類,那么在這個測試樣本中,它的準確率仍為90%,這顯示是不合理的。為了解決上述問題,人們從醫療分析領域引入了一種新的分類模型performance評判方法——ROC分析。在介紹ROC之前,首先討論一下混淆矩陣(Confusion matrix)。

混淆矩陣是監督學習中的一種可視化工具,主要用于比較分類結果和實例的真實信息(outcom vs.? ground truth)。矩陣中的每一行代表實例的預測類別,每一列代表實例的真實類別。在混淆矩陣中,每一個實例可以劃分為四種類型之一,True Positive\False Positive\False Negative\True Negetive(TP\FP\FN\TN),如圖1所示。其中,Positive代表預測實例來自正類,Negetive代表預測實例來自負類;True代表預測正確,False代表預測錯誤。



由混淆矩陣可以計算一系列的評價指標,如accurancy、precision、recall等等。

回到ROC上來,ROC的全名叫做Receiver Operating Characteristic。ROC關注兩個指標true positive rate(TPR= TP / [TP + FN] ) 和??false positive rate?(FPR= FP / [FP + TN] ),直觀上,TPR代表能將正例分對的概率,FPR代表將負例錯分為正例的概率。在ROC 空間中,每個點的橫坐標是FPR,縱坐標是TPR,這也就描繪了分類器在TP(真正的正例)和FP(錯誤的正例)間的trade-off。ROC的主要分析工具是一個畫在ROC空間的曲線——ROC curve。我們知道,對于二值分類問題,實例的值往往是連續值,我們通過設定一個閾值,將實例分類到正類或者負類(比如大于閾值劃分為正類)。因此我們可以變化閾值,根據不同的閾值進行分類,根據分類結果計算得到ROC空間中相應的點,連接這些點就形成ROC curve。ROC curve經過(0,0)(1,1),實際上(0, 0)和(1, 1)連線形成的ROC curve實際上代表的是一個隨機分類器。一般情況下,這個曲線都應該處于(0, 0)和(1, 1)連線的上方。如圖2所示。

圖2 ROC Curve

用ROC curve來表示分類器的performance很直觀好用。可是,人們總是希望能有一個數值來標志分類器的好壞。于是Area Under roc Curve(AUC)就出現了。顧名思義,AUC的值就是處于ROC curve下方的那部分面積的大小。通常,AUC的值介于0.5到1.0之間,較大的AUC代表了較好的performance。


如果分類器只對實例產生p或者n的標簽,那么所有的測試集也只能對應圖中的一個點。

需要一個threshold,如果得分大于threshold則是p,否則是n

顯然隨著threshold的不斷下降,tpr也隨著變大,就是預測正例占實際正例的比率,而fpr也隨之變大,就是有越來越多的負例被錯誤的標注為正例


這樣就能形成一條折線,計算這條折線下面的面積就是auc



折線上點傍邊的值就是threshold


http://blog.csdn.net/chjjunking/article/details/5933105


讓我們從頭說起,首先AUC是一種用來度量分類模型好壞的一個標準。這樣的標準其實有很多,例如:大約10年前在machine learning文獻中一統天下的標準:分類精度;在信息檢索(IR)領域中常用的recall和precision,等等。其實,度量反應了人們對” 好”的分類結果的追求,同一時期的不同的度量反映了人們對什么是”好”這個最根本問題的不同認識,而不同時期流行的度量則反映了人們認識事物的深度的變 化。近年來,隨著machine learning的相關技術從實驗室走向實際應用,一些實際的問題對度量標準提出了新的需求。特別的,現實中樣本在不同類別上的不均衡分布(class distribution imbalance problem)。使得accuracy這樣的傳統的度量標準不能恰當的反應分類器的performance。舉個例子:測試樣本中有A類樣本90個,B 類樣本10個。分類器C1把所有的測試樣本都分成了A類,分類器C2把A類的90個樣本分對了70個,B類的10個樣本分對了5個。則C1的分類精度為 90%,C2的分類精度為75%。但是,顯然C2更有用些。另外,在一些分類問題中犯不同的錯誤代價是不同的(cost sensitive learning)。這樣,默認0.5為分類閾值的傳統做法也顯得不恰當了。

為了解決上述問題,人們從醫療分析領域引入了一種新的分類模型performance評判方法——ROC分析。ROC分析本身就是一個很豐富的內容,有興趣的讀者可以自行Google。由于我自己對ROC分析的內容了解還不深刻,所以這里只做些簡單的概念性的介紹。

ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一個畫在二維平面上的曲線——ROC curve。平面的橫坐標是false positive rate(FPR),縱坐標是true positive rate(TPR)。對某個分類器而言,我們可以根據其在測試樣本上的表現得到一個TPR和FPR點對。這樣,此分類器就可以映射成ROC平面上的一個點。調整這個分類器分類時候使用的閾值,我們就可以得到一個經過(0, 0),(1, 1)的曲線,這就是此分類器的ROC曲線。一般情況下,這個曲線都應該處于(0, 0)和(1, 1)連線的上方。因為(0, 0)和(1, 1)連線形成的ROC曲線實際上代表的是一個隨機分類器。如果很不幸,你得到一個位于此直線下方的分類器的話,一個直觀的補救辦法就是把所有的預測結果反向,即:分類器輸出結果為正類,則最終分類的結果為負類,反之,則為正類。雖然,用ROC curve來表示分類器的performance很直觀好用。可是,人們總是希望能有一個數值來標志分類器的好壞。于是Area Under roc Curve(AUC)就出現了。顧名思義,AUC的值就是處于ROC curve下方的那部分面積的大小。通常,AUC的值介于0.5到1.0之間,較大的AUC代表了較好的performance。好了,到此為止,所有的 前續介紹部分結束,下面進入本篇帖子的主題:AUC的計算方法總結。

?

最直觀的,根據AUC這個名稱,我們知道,計算出ROC曲線下面的面積,就是AUC的值。事實上,這也是在早期Machine Learning文獻中常見的AUC計算方法。由于我們的測試樣本是有限的。我們得到的AUC曲線必然是一個階梯狀的。因此,計算的AUC也就是這些階梯下面的面積之和。這樣,我們先把score排序(假設score越大,此樣本屬于正類的概率越大),然后一邊掃描就可以得到我們想要的AUC。但是,這么 做有個缺點,就是當多個測試樣本的score相等的時候,我們調整一下閾值,得到的不是曲線一個階梯往上或者往右的延展,而是斜著向上形成一個梯形。此時,我們就需要計算這個梯形的面積。由此,我們可以看到,用這種方法計算AUC實際上是比較麻煩的。

?

一個關于AUC的很有趣的性質是,它和Wilcoxon-Mann-Witney Test是等價的。這個等價關系的證明留在下篇帖子中給出。而Wilcoxon-Mann-Witney Test就是測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的概率大于負類樣本的score。有了這個定義,我們就得到了另外一中計算AUC的辦法:得到這個概率。我們知道,在有限樣本中我們常用的得到概率的辦法就是通過頻率來估計之。這種估計隨著樣本規模的擴大而逐漸逼近真實值。這 和上面的方法中,樣本數越多,計算的AUC越準確類似,也和計算積分的時候,小區間劃分的越細,計算的越準確是同樣的道理。具體來說就是統計一下所有的 M×N(M為正類樣本的數目,N為負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大于負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。然后除以MN。實現這個方法的復雜度為O(n^2)。n為樣本數(即n=M+N)

?

第三種方法實際上和上述第二種方法是一樣的,但是復雜度減小了。它也是首先對score從大到小排序,然后令最大score對應的sample 的rank為n,第二大score對應sample的rank為n-1,以此類推。然后把所有的正類樣本的rank相加,再減去正類樣本的score為最 小的那M個值的情況。得到的就是所有的樣本中有多少對正類樣本的score大于負類樣本的score。然后再除以M×N。即

?

AUC=((所有的正例位置相加)-M*(M+1))/(M*N)

?

另外,特別需要注意的是,再存在score相等的情況時,對相等score的樣本,需要 賦予相同的rank(無論這個相等的score是出現在同類樣本還是不同類的樣本之間,都需要這樣處理)。具體操作就是再把所有這些score相等的樣本 的rank取平均。然后再使用上述公式。


方法3的方法沒有看太明白,但是方法2的思想很清楚。就是要通過正例和負例的比較。

roc求的是取一個正例和一個負例,正例的分數大于負例分數的概率

根據方法3的算法

awk 'BEGIN{s=0;w=0;h=0;}{if($1==1){h++;}else {w++;s=s+h;}}END{AUC=s/(w*h); print AUC}'

對于上面的計算方法的直觀例子是:

左邊表示實例的標注,+或者-

右邊是模型給出的得分


+ 0.9

- 0.85

+ 0.8

+ 0.75

- 0.6


就是計算有多少個正例的得分大于負例

對于第一個負例而言,有一個正例的得分大于它,+1

第二個負例,有三個正例的得得分大于它,+3


所以一共有4個正例大于負例的得分


http://blog.csdn.net/sasuke546/article/details/8872525

AUC的計算方法實際上是計算每個離散ROC點之間所形成的梯形面積來估算的。

以下是Matlab的代碼

輸入score是分類器的輸出向量,label是實際的標簽,P是正類的樣本數,N是負類的樣本數,在標簽中,正類是2類,負類是1類

  • function?[?Area?]?=?AUC(?score?,?label,?P,?N?)??
  • ??
  • ????function?[?A?]?=?Trapezoid_area(x1,x2,y1,y2)???%?Area?of?Trapezoid??
  • ??
  • ????????base?=?abs(x1-x2);??
  • ????????height?=?(y1+y2)/2;??
  • ??
  • ????????A?=??base*height;??
  • ??
  • ????end??
  • ??
  • ????function?[?f?]?=?equal(a,b)????%?isequal??
  • ??
  • ????????if(abs(a-b)<1e-8)??
  • ????????????f?=?1;??
  • ????????else??
  • ????????????f?=?0;??
  • ????????end??
  • ??
  • ????end??
  • %AUC?Summary?of?this?function?goes?here??
  • %???Detailed?explanation?goes?here??
  • ??
  • [Y,ind]=sort(score,'descend');??%?sort,?Y?is?the?vector?after?sort??
  • ????????????????????????????????%?ind?is?the?index?of?the?original?place??
  • ??
  • NS?=?size(score,2);??
  • ??
  • FP?=?0;??
  • TP?=?0;??
  • ??
  • FPpv?=?0;?TPpv?=?0;??
  • ??
  • Area?=?0;?fprev?=?-999999999;??
  • ??
  • i?=?1;??
  • ??
  • while?(i<=NS)??
  • ??????
  • ????if(equal(Y(i),fprev)==0)??%?not?equal??
  • ????????Area?=?Area?+?Trapezoid_area(FP,FPpv,TP,TPpv);??
  • ????????fprev?=?Y(i);??
  • ????????FPpv?=?FP;??
  • ????????TPpv?=?TP;??
  • ????end??
  • ????if(label(ind(i))==2)???%?instanse?i?is?positive??
  • ????????TP?=?TP?+1;??
  • ????else???????????????????%?negative??
  • ????????FP?=?FP?+?1;??
  • ????end??
  • ??????
  • ????i?=?i?+?1;??
  • ??????
  • end??
  • ??
  • Area?=?Area?+?Trapezoid_area(N,FPpv,P,TPpv);??
  • Area?=?Area/(P*N);??
  • ??
  • ??
  • end??



  • http://www.yewen.us/blog/2012/06/machine-learning-2-offline-evaluation/

    機器學習手記系列 2: 離線效果評估

    Posted on?2012年6月3日

    上一次說到選特征的一個簡單方法, 但是如果真的要評估一個方法或者一類特征的效果, 簡單的相似度計算是不夠的, 在上線實驗之前, 還是需要有一些別的方式來做驗證.

    我遇到過的大部分機器學習問題, 最終都轉成了二分類問題 (概率問題). 最直白的比如 A 是否屬于集合 S (某照片中的人臉是否是人物 Z), 排序問題也可以轉換為二分類問題, 比如廣告點擊率或推薦的相關度, 把候選集分為點擊/不點擊或接受推薦/不接受推薦的二分類概率. 那在上線之前, 可以用過一些分類器性能評估的方法來做離線評估.

    分類器的正確率和召回率

    前幾天在無覓上看到有人分享了一篇?數據不平衡時分類器性能評價之ROC曲線分析, 把這個問題已經講差不多了, 我這復述一下.

    先說混淆矩陣 (confusion matrix). 混淆矩陣是評估分類器可信度的一個基本工具, 設實際的所有正樣本為 P (real-Positive), 負樣本為 N (real-Negative), 分類器分到的正樣本標為 pre-Positive', 負樣本標為 pre-Negetive', 則可以用下面的混淆矩陣表示所有情況:

    | real-positive | real-negative pre-positive' | TP (true positive) | FP (false positive) pre-negative' | FN (false negative) | TN (true negative)

    通過這個矩陣, 可以得到很多評估指標:

    FP rate = FP / N TP rate = TP / P Accuracy = (TP + TN) / (P + N) # 一般稱之為準確性或正確性 Precision = TP / (TP + FP) # 另一些領域的準確性或正確性, 經常需要看上下文來判斷 Recall = TP / P # 一般稱之為召回率 F-score = Precision * Recall

    在我接觸過的大部分工作中, 大家都在關注 Precision 和 Recall. 同引用原文中提到的, 這樣的分類評估性能只在數據比較平衡時比較好用 (正負例比例接近), 在很多特定情況下正負例是明顯有偏的 (比如萬分之幾點擊率的顯示廣告), 那就只能作為一定的參考指標.

    分類器的排序能力評估

    很多情況下我們除了希望分類器按某個閾值將正負樣本完全分開, 同時還想知道候選集中不同條目的序關系. 比如廣告和推薦, 首先需要一個基礎閾值來保證召回的內容都滿足基本相關度, 比如我一大老爺們去搜筆記本維修代理你給我出一少女睫毛膏的廣告或推薦關注, 我絕對飆一句你大爺的然后開AdBlock?屏蔽之. 在保證了基礎相關性 (即分類器的正負例分開) 后, 則需要比較同樣是正例的集合里, 哪些更正點 (其實說白了就是怎樣才收益最大化). 一般來說, 如果分類器的輸出是一個正例概率, 則直接按這個概率來排序就行了. 如果最終收益還要通過評估函數轉換, 比如廣告的 eCPM = CTR*Price, 或推薦里 rev = f(CTR), (f(x) 是一個不同條目的獲益權重函數), 那么為了評估序是否好, 一般會再引入 ROC 曲線和 AUC 面積兩個指標.

    ROC 曲線全稱是 Receiver Operating Characteristic (ROC curve), 詳細的解釋可以見維基百科上的英文詞條?Receiver_operating_characteristic?或中文詞條?ROC曲線. 我對 ROC 曲線的理解是, 對某個樣本集, 當前分類器對其分類結果的 FPR 在 x 時, TPR 能到 y. 如果分類器完全準確, 則在 x = 0 時 y 就能到 1, 如果分類器完全不靠譜, 則在 x = 1 時 y 還是為 0, 如果 x = y, 那說明這個分類器在隨機分類. 因為兩個都是 Rate, 是 [0, 1] 之間的取值, 所以按此方法描的點都在一個 (0, 0), (1, 1) 的矩形內, 拉一條直線從 (0, 0) 到 (1, 1), 如果描點在這條直線上, 說明分類器對當前樣本就是隨機分的 (做分類最悲催的事), 如果描點在左上方, 說明當前分類器對此樣本分類效果好過隨機, 如果在右下方, 那說明分類器在做比隨機還坑爹的反向分類. 引用維基百科上的一個圖來說明:


    其中 C' 好于 A (都是正向的), B 是隨機, C 是一個反效果 (跟 C' 沿紅線軸對稱, 就是說把 C 的結果反過來就得到 C').

    如果我們有足夠多的樣本, 則對一個分類器可以在 ROC 曲線圖上畫出若干個點, 把這些點和 (0, 0), (1, 1) 連起來求凸包, 就得到了 AUC 面積 (Area Under Curve, 曲線下面積). 非常明顯, 這個凸包的最小下面積是 0.5 (從 (0, 0) 到 (1, 1) 的這條線), 最大是 1.0 (整個矩形面積), AUC 值越大, 說明分類效果越好.

    用 ROC 曲線定義的方式來描點計算面積會很麻煩, 不過還好前人給了我們一個近似公式, 我找到的最原始出處是 Hand, Till 在 Machine Learning 2001 上的一篇文章給出 [文章鏈接]. 中間的推導過程比較繁瑣, 直接說我對這個計算方法的理解: 將所有樣本按預估概率從小到大排序, 然后從 (0, 0) 點開始描點, 每個新的點是在前一個點的基礎上, 橫坐標加上當前樣本的正例在總正例數中的占比, 縱坐標加上當前樣本的負例在總負例數中的占比, 最終的終點一定是 (1, 1), 對這個曲線求面積, 即得到 AUC. 其物理意義也非常直觀, 如果我們把負例都排在正例前面, 則曲線一定是先往上再往右, 得到的面積大于 0.5, 說明分類器效果比隨機好, 最極端的情況就是所有負例都在正例前, 則曲線就是 (0, 0) -> (0, 1) -> (1, 1) 這樣的形狀, 面積為 1.0.

    同樣給一份 C 代碼實現:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 structSampleNode { ??doublepredict_value; ??unsignedintpos_num; ??unsignedintneg_num; }; ? intcmp(constvoid*a,constvoid*b) { ???SampleNode *aa = (SampleNode *)a; ???SampleNode *bb = (SampleNode *)b; ???return(((aa->predict_value)-(bb->predict_value)>0)?1:-1); } ? doublecalcAuc(SampleNode samples[],intsample_num) { ??qsort(samples, sample_num,sizeof(SampleNode), cmp); ? ??// init all counters ??doublesum_pos = 0; ??doublesum_neg = 0; ??doublenew_neg = 0; ??doublerp = 0; ??for(inti = 0; i < sample_num; ++i) { ????if(samples[i].neg_num >= 0) { ??????new_neg += samples[i].neg_num; ????} ? ????if(samples[i].pos_num >= 0) { ??????// calc as trapezium, not rectangle ??????rp += samples[i].pos_num * (sum_neg + new_neg)/2; ??????sum_pos += samples[i].pos_num; ????} ????sum_neg = new_neg; ??} ? ??returnrp/(sum_pos*sum_neg); }

    分類器的一致性

    如果分類器的概率結果就是最終結果序, 那 AUC 值基本可以當作最終效果來用. 但是實際應用中分類器的結果都要再做函數轉換才是最終序, 則評估的時候需要將轉換函數也帶上去做 AUC 評估才行. 某些應用中這個轉換函數是不確定的, 比如廣告的價格隨時會變, 推薦條目的重要性或收益可能也是另一個計算模型的結果. 在這種情況下, 如果我們可以保證分類器概率和實際概率一致, 讓后續的轉換函數拿到一個正確的輸入, 那么在實際應用中才能達到最優性能.

    為了評估分類器概率和實際概率的一致性, 引入 MAE (Mean Absolute Error, 平均絕對誤差) 這個指標, 維基百科對應的詞條是Mean_absolute_error. 最終的計算方法很簡單, 對樣本 i, fi?是預估概率, yi是實際概率, 則 i 上絕對誤差是 ei, 累加求平均就是 MAE:

    MAE 的值域是 [0, +∞), 值越小說明分類器輸出和實際值的一致性越好. 我個人認為如果 MAE 和實際概率一樣大, 那這個分類器的波動效果也大到讓預估近似隨機了.

    MAE 看起來和標準差有點像, 類似標準差和方差的關系, MAE 也有一個對應的 MSE (Mean Squared Error, 均方差?), 這個指標更多考慮的是極壞情況的影響, 計算比較麻煩, 一般用的也不多, 有興趣的可以看維基百科上的詞條Mean_squared_error.

    MAE 計算太簡單, MSE 計算太糾結, 所以都不在這給出代碼實現.




    總結

    以上是生活随笔為你收集整理的auc-roc的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。