機器學習:sklearn分類報告classification_report()中精確率, 召回率, F1等的含義

一、classification_report簡介

  def classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)

print(classification_report(testY, predictions))

  該函數就是在進行了分類任務之後通過輸入原始真實數據(y_true)和預測數據(y_pred)而得到的分類報告,常常用來觀察模型的好壞,如利用f1-score進行評判

  它的輸出是類似下面這樣的(該輸出結果爲對mnist手寫數字的分類,共有10類):

              precision    recall  f1-score   support

           0       1.00      1.00      1.00        44
           1       0.94      0.98      0.96        48
           2       0.98      0.98      0.98        44
           3       1.00      0.89      0.94        44
           4       0.92      1.00      0.96        56
           5       0.93      0.96      0.95        57
           6       0.98      0.96      0.97        48
           7       1.00      1.00      1.00        42
           8       0.94      0.91      0.92        33
           9       0.97      0.91      0.94        34

    accuracy                           0.96       450
   macro avg       0.97      0.96      0.96       450
weighted avg       0.96      0.96      0.96       450

 二、各分類指標的含義

    要想知道這些數據是怎麼算出來的,要先了解一下幾個常見的模型評價術語,現在假設我們的分類目標只有兩類,計爲正例或陽例(positive)和負例或陰例(negtive)分別是:

  (1)True positives(TP):  被正確地劃分爲正例的個數,即實際爲正例且被分類器劃分爲正例的實例數(樣本數);

  (2)False positives(FP): 被錯誤地劃分爲正例的個數,即實際爲負例但被分類器劃分爲正例的實例數;

  (3)False negatives(FN):被錯誤地劃分爲負例的個數,即實際爲正例但被分類器劃分爲負例的實例數;

  (4)True negatives(TN): 被正確地劃分爲負例的個數,即實際爲負例且被分類器劃分爲負例的實例數。

預測類別
  總計
TP FN P(實際上爲該類的)
FP TN N(實際上不是該類的)
  P‘被分類器分爲屬於該類的 N’被分類器分爲不屬於該類的 P+N

   要注意P = TP + FN 而不是 TP+FP

1.精確率(precision)

    precision = TP / ( TP + FP )

    精確率是精確性的指標,表示被分類器正確分爲正例的個數(TP)佔被分類器分爲正例的樣本(TP+FP)的比重。

2.召回率(recall)

    recall = TP / ( TP + FN ) = TP / P

    召回率是覆蓋面的度量,也就是被分類器正確分爲正例的個數(TP)佔原始數據中全部正例(TP+FN)的比重。

    如果有些難理解,可以看一下下面這張圖:

圖片無效

    上面relevant elements 可以理解成屬於該類的,右半部分就是不屬於該類的,其中TP = 5 , FN = 7,FP = 3 ,TN = 7

    所以 precision =TP / ( TP + FP ) = 5/(5+3) = 0.625

            recall =TP / ( TP + FN )=  5/(5+7) = 0.417

3.F1 score 

    也稱爲F-beta score

    \frac{1}{F_1} = \frac{1}{2}*(\frac{1}{P}+\frac{1}{R})

    F_1 =2*\frac{P*R}{P+R}\quad\quad where\ P = precisioin \quad R=recall

    只有當P和R都很高的時候,F1纔會高,所以稱爲調和平均數,F1的取值範圍是0到1

    按照前面的數值 F1 = 0.50

4.support

    支持度,是指原始的真實數據中屬於該類的個數

5.accuracy

    準確率,這個跟精確率只有一字之差,但實際上有很大的不同,它是指正確分類(不管是正確分爲P還是N)的比率

    accuray = (TP + TN) / (TP + FP + TN + FN ) = (TP + TN) / (P+N)

    事實上從字面上看accuray和f1一樣都可以作爲一個指標評判整個模型,但是accruracy存在一個bug,當數據嚴重不均衡時,        accuracy不起作用,比如我們看X光片,真實數據是:99%都是無病的,只有1%是有病的,假設一個分類器只要給它一張X 光片,它就判定是無病的,那麼它的準確率也有99%,乍看很高,然而這個模型根本就不work。

6.宏平均(macro avg)和微平均(micro avg)

    比如不同類別對於precision的宏平均是將各類的precision先算好再對它們求算術平均。

    而對於precision的微平均是將所有類中中真陽例先加起來,再除以所有類中的(真陽例+假陽例)。下面是一個例子:

    第一類

        TP1= 12,FP1=9,FN1=3

        Then precision (P1) and recall (R1) will be 57.14 and 80

    第二類

        TP2= 50,FP2=23 ,FN2=9

        Then precision (P2) and recall (R2) will be 68.49 and 84.75

    宏平均

        Macro-average precision = (P1+P2)/2 = (57.14+68.49)/2 = 62.82

        Macro-average recall = (R1+R2)/2 = (80+84.75)/2 = 82.25

    微平均

        Micro-average of precision = (TP1+TP2)/(TP1+TP2+FP1+FP2) = (12+50)/(12+50+9+23) = 65.96

        Micro-average of recall = (TP1+TP2)/(TP1+TP2+FN1+FN2) = (12+50)/(12+50+3+9) = 83.78

    微平均在classification_report中只有在多標籤分類的時候纔會顯示,多標籤不是指多個類,而是一個樣本可能屬於兩個或以上的類。

7.加權平均(weighted avg)和樣本平均(sample avg)

    (1)加權平均(weighted avg):加上每個類的權重,即它的support的大小

        精確度P的weighted avg  = (P1 * support1 + P2 * support2) / (support1+support2)

    (2)樣本平均(sample avg):跟微平均一樣,僅在多標籤分類時顯示

三、其他評判指標

    (1)靈敏度(sensitive)

     sensitive = TP/P,表示的是所有正例中被分對的比例,衡量了分類器對正例的識別能力,可以看到召回率與靈敏度是一樣的。

  (2)特效度(specificity)

  specificity = TN/N,表示的是所有負例中被分對的比例,衡量了分類器對負例的識別能力;

 

參考資料:

https://en.wikipedia.org/wiki/Precision_and_recall

https://en.wikipedia.org/wiki/F1_score

https://www.cnblogs.com/mxp-neu/articles/5316989.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章