轉自:http://www.cnblogs.com/fengfenggirl/p/classification_evaluate.html
Version:1.0StartHTML:000000216EndHTML:000026331StartFragment:000002452EndFragment:000026245StartSelection:000002452EndSelection:000026241SourceURL:https://www.cnblogs.com/mxp-neu/articles/5316989.html
一、引言
分類算法有很多,不同分類算法又用很多不同的變種。不同的分類算法有不同的特定,在不同的數據集上表現的效果也不同,我們需要根據特定的任務進行算法的選擇,如何選擇分類,如何評價一個分類算法的好壞,前面關于決策樹的介紹,我們主要用的正確率(accuracy)來評價分類算法。
正確率確實是一個很好很直觀的評價指標,但是有時候正確率高并不能代表一個算法就好。比如某個地區某天地震的預測,假設我們有一堆的特征作為地震分類的屬性,類別只有兩個:0:不發生地震、1:發生地震。一個不加思考的分類器,對每一個測試用例都將類別劃分為0,那那么它就可能達到99%的正確率,但真的地震來臨時,這個分類器毫無察覺,這個分類帶來的損失是巨大的。為什么99%的正確率的分類器卻不是我們想要的,因為這里數據分布不均衡,類別1的數據太少,完全錯分類別1依然可以達到很高的正確率卻忽視了我們關注的東西。接下來詳細介紹一下分類算法的評價指標。
二、評價指標
1、幾個常用的術語
這里首先介紹幾個常見的模型評價術語,現在假設我們的分類目標只有兩類,計為正例(positive)和負例(negtive)分別是:
1)True positives(TP): ?被正確地劃分為正例的個數,即實際為正例且被分類器劃分為正例的實例數(樣本數);
2)False positives(FP): 被錯誤地劃分為正例的個數,即實際為負例但被分類器劃分為正例的實例數;
3)False negatives(FN):被錯誤地劃分為負例的個數,即實際為正例但被分類器劃分為負例的實例數;
4)True?negatives(TN):?被正確地劃分為負例的個數,即實際為負例且被分類器劃分為負例的實例數。
上圖是這四個術語的混淆矩陣,我只知道FP叫偽陽率,其他的怎么稱呼就不詳了。注意P=TP+FN表示實際為正例的樣本個數,我曾經誤以為實際為正例的樣本數應該為TP+FP,這里只要記住True、False描述的是分類器是否判斷正確,Positive、Negative是分類器的分類結果。如果正例計為1、負例計為-1,即positive=1、negtive=-1,用1表示True,-1表示False,那么實際的類標=TF*PN,TF為true或false,PN為positive或negtive。例如True positives(TP)的實際類標=1*1=1為正例,False positives(FP)的實際類標=(-1)*1=-1為負例,False negatives(FN)的實際類標=(-1)*(-1)=1為正例,True?negatives(TN)的實際類標=1*(-1)=-1為負例。
2、評價指標
1)正確率(accuracy)
正確率是我們最常見的評價指標,accuracy = (TP+TN)/(P+N),這個很容易理解,就是被分對的樣本數除以所有的樣本數,通常來說,正確率越高,分類器越好;
2)錯誤率(error rate)
錯誤率則與正確率相反,描述被分類器錯分的比例,error rate = (FP+FN)/(P+N),對某一個實例來說,分對與分錯是互斥事件,所以accuracy =1 - ?error rate;
3)靈敏度(sensitive)
sensitive = TP/P,表示的是所有正例中被分對的比例,衡量了分類器對正例的識別能力;
4)特效度(specificity)
specificity = TN/N,表示的是所有負例中被分對的比例,衡量了分類器對負例的識別能力;
5)精度(precision)
精度是精確性的度量,表示被分為正例的示例中實際為正例的比例,precision=TP/(TP+FP);
6)召回率(recall)
召回率是覆蓋面的度量,度量有多個正例被分為正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率與靈敏度是一樣的。
7)其他評價指標
? ? ? ? ? ?? 計算速度:分類器訓練和預測需要的時間;
? ? ? ? ? ?? 魯棒性:處理缺失值和異常值的能力;
? ? ? ? ? ?? 可擴展性:處理大數據集的能力;
可解釋性:分類器的預測標準的可理解性,像決策樹產生的規則就是很容易理解的,而神經網絡的一堆參數就不好理解,我們只好把它看成一個黑盒子。
對于某個具體的分類器而言,我們不可能同時提高所有上面介紹的指標,當然,如果一個分類器能正確分對所有的實例,那么各項指標都已經達到最優,但這樣的分類器往往不存在。比如我們開頭說的地震預測,沒有誰能準確預測地震的發生,但我們能容忍一定程度的誤報,假設1000次預測中,有5次預測為發現地震,其中一次真的發生了地震,而其他4次為誤報,那么正確率從原來的999/1000=99.9%下降到996/1000=99.6,但召回率從0/1=0%上升為1/1=100%,這樣雖然謊報了幾次地震,但真的地震來臨時,我們沒有錯過,這樣的分類器才是我們想要的,在一定正確率的前提下,我們要求分類器的召回率盡可能的高。
http://blog.sciencenet.cn/blog-460603-785098.html
分類是一種重要的數據挖掘算法。分類的目的是構造一個分類函數或分類模型(即分類器),通過分類器將數據對象映射到某一個給定的類別中。分類器的主要評價指標有準確率(Precision)、召回率(Recall)、Fb-score、ROC、AOC等。在研究中也有采用Accuracy(正確率)來評價分類器的。但準確率和正確率這兩個概念經常有人混了。【沒有耐心看下面內容的博友請看最后的結論】
準確率(Precision)?和召回率(Recall)是信息檢索領域兩個最基本的指標。準確率也稱為查準率,召回率也稱為查全率。它們的定義如下:
Precision=系統檢索到的相關文件數量/系統檢索到的文件總數量
Recall=系統檢索到的相關文件數量/系統所有相關文件數量
Fb-score是準確率和召回率的調和平均:Fb=[(1+b2)*P*R]/(b2*P+R),比較常用的是F1。
在信息檢索中,準確率和召回率是互相影響的,雖然兩者都高是一種期望的理想情況,然而實際中常常是準確率高、召回率就低,或者召回率低、但準確率高。所以在實際中常常需要根據具體情況做出取舍,例如對一般搜索的情況是在保證召回率的情況下提升準確率,而如果是疾病監測、反垃圾郵件等,則是在保證準確率的條件下,提升召回率。但有時候,需要兼顧兩者,那么就可以用F-score指標。
ROC和AUC是評價分類器的指標。ROC是受試者工作特征曲線 receiver operating characteristic curve ) 的簡寫,又稱為感受性曲線(sensitivity curve)。得此名的原因在于曲線上各點反映著相同的感受性,它們都是對同一信號刺激的反應,只不過是在幾種不同的判定標準下所得的結果而已[1]。ROC是反映敏感性和特異性連續變量的綜合指標,是用構圖法揭示敏感性和特異性的相互關系,它通過將連續變量設定出多個不同的臨界值,從而計算出一系列敏感性和特異性,再以敏感性為縱坐標、(1-特異性)為橫坐標繪制成曲線。AUC是ROC曲線下面積(Area Under roc Curve)的簡稱,顧名思義,AUC的值就是處于ROC curve下方的那部分面積的大小。通常,AUC的值介于0.5到1.0之間,AUC越大,診斷準確性越高。在ROC曲線上,最靠近坐標圖左上方的點為敏感性和特異性均較高的臨界值。
為了解釋ROC的概念,讓我們考慮一個二分類問題,即將實例分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況。如果一個實例是正類并且也被預測成正類,即為真正類(True positive),如果實例是負類被預測成正類,稱之為假正類(False positive)。相應地,如果實例是負類被預測成負類,稱之為真負類(Truenegative),正類被預測成負類則為假負類(falsenegative)。列聯表或混淆矩陣如下表所示,1代表正類,0代表負類。
? ?基于該列聯表,定義敏感性指標為:sensitivity=TP/(TP+FN)。敏感性指標又稱為真正類率(truepositive rate ,TPR),刻畫的是分類器所識別出的正實例占所有正實例的比例。
? ?另外定義負正類率(false positive rate, FPR),計算公式為:FPR=FP/(FP+TN).負正類率計算的是分類器錯認為正類的負實例占所有負實例的比例
? ?定義特異性指標為:Specificity=TN/(FP+TN)=1-FPR。特異性指標又稱為真負類率(True Negative Rate,TNR)。
? ?我們看,實際上,敏感性指標就是召回率,特異性指標=1-FPR。
? ?ROC曲線由兩個變量繪制。橫坐標是1-specificity,即負正類率(FPR),縱坐標是?Sensitivity,即真正類率(TPR)。
? ?在此基礎上,還可以定義正確率(Accuracy)和錯誤率(Error)。 Accuracy=(TP+TN)/(TP+FP+TN+FN) , Error= (FP+FN)/(TP+FP+TN+FN)。如果把預測為1看作檢索結果,則準確率Precision= TP/(TP+FP)。
結論:
分類正確率(Accuracy),不管是哪個類別,只要預測正確,其數量都放在分子上,而分母是全部數據數量,這說明正確率是對全部數據的判斷。而準確率在分類中對應的是某個類別,分子是預測該類別正確的數量,分母是預測為該類別的全部數據的數量。或者說,Accuracy是對分類器整體上的正確率的評價,而Precision是分類器預測為某一個類別的正確率的評價。
https://argcv.com/articles/1036.c
自然語言處理(ML),機器學習(NLP),信息檢索(IR)等領域,評估(Evaluation)是一個必要的工作,而其評價指標往往有如下幾點:準確率(Accuracy),精確率(Precision),召回率(Recall)和F1-Measure。
本文將簡單介紹其中幾個概念。中文中這幾個評價指標翻譯各有不同,所以一般情況下推薦使用英文。
現在我先假定一個具體場景作為例子。
假如某個班級有男生80人,女生20人,共計100人.目標是找出所有女生.
現在某人挑選出50個人,其中20人是女生,另外還錯誤的把30個男生也當作女生挑選出來了.
作為評估者的你需要來評估(evaluation)下他的工作
首先我們可以計算準確率(accuracy),其定義是: 對于給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。也就是損失函數是0-1損失時測試數據集上的準確率[1].
這樣說聽起來有點抽象,簡單說就是,前面的場景中,實際情況是那個班級有男的和女的兩類,某人(也就是定義中所說的分類器)他又把班級中的人分為男女兩類。accuracy需要得到的是此君分正確的人占總人數的比例。很容易,我們可以得到:他把其中70(20女+50男)人判定正確了,而總人數是100人,所以它的accuracy就是70 %(70 / 100).
由準確率,我們的確可以在一些場合,從某種意義上得到一個分類器是否有效,但它并不總是能有效的評價一個分類器的工作。舉個例子,google抓取了argcv 100個頁面,而它索引中共有10,000,000個頁面,隨機抽一個頁面,分類下,這是不是argcv的頁面呢?如果以accuracy來判斷我的工作,那我會把所有的頁面都判斷為"不是argcv的頁面",因為我這樣效率非常高(return false,一句話),而accuracy已經到了99.999%(9,999,900/10,000,000),完爆其它很多分類器辛辛苦苦算的值,而我這個算法顯然不是需求期待的,那怎么解決呢?這就是precision,recall和f1-measure出場的時間了.
在說precision,recall和f1-measure之前,我們需要先需要定義TP,FN,FP,TN四種分類情況.
按照前面例子,我們需要從一個班級中的人中尋找所有女生,如果把這個任務當成一個分類器的話,那么女生就是我們需要的,而男生不是,所以我們稱女生為"正類",而男生為"負類".
通過這張表,我們可以很容易得到這幾個值:
TP=20
FP=30
FN=0
TN=50
精確率(precision)的公式是P=TPTP+FP,它計算的是所有被檢索到的item中,"應該被檢索到"的item占的比例。
在例子中就是希望知道此君得到的所有人中,正確的人(也就是女生)占有的比例.所以其precision也就是40%(20女生/(20女生+30誤判為女生的男生)).
召回率(recall)的公式是R=TPTP+FN,它計算的是所有檢索到的item占所有"應該檢索到的item"的比例。
在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recall也就是100%(20女生/(20女生+ 0 誤判為男生的女生))
F1值就是精確值和召回率的調和均值,也就是
2F1=1P+1R
調整下也就是
F1=2PRP+R=2TP2TP+FP+FN
例子中 F1-measure 也就是約為 57.143%(2?0.4?10.4+1).
需要說明的是,有人[2]列了這樣個公式
Fa=(a2+1)PRa2(P+R)
將F-measure一般化.
F1-measure認為精確率和召回率的權重是一樣的,但有些場景下,我們可能認為精確率會更加重要,調整參數a,使用Fa-measure可以幫助我們更好的evaluate結果.
話雖然很多,其實實現非常輕松,點擊此處可以看到我的一個簡單的實現.
References