精度(precision),召回率(recall),map

pikaqiu_n95發表於2020-10-20

目標檢測中經常會見到precision,recall,map三個指標用來評估一個模型的優劣,當然在很多其他的應用中也可以看到這三個指標的具體應用;因此很有必要對這三個指標進行詳細的瞭解。在介紹這三個指標之前有必要先了解幾個基本的術語:True positives,True negatives,False positives,False negative。

大雁和飛機
假設現有一個測試集,測試集中僅包含大雁和飛機兩種目標,如圖所示:
在這裡插入圖片描述
假設分類的目標是:取出測試集中所有飛機圖片,而非大雁圖片
現做如下定義:
True positives: 飛機的圖片被正確識別為飛機
True negatives:大雁的圖片被識別為大雁
False positives:大雁的圖片被識別為飛機
False negatives:飛機的圖片被識別為大雁

假設分類系統使用上述假設識別出了四個結果,如下圖所示:
在這裡插入圖片描述
識別為飛機的圖片中:
True positives:有三個,畫綠色框的飛機
False positives:有一個,畫紅色框的大雁

識別為大雁的圖片中:
True negatives:有四個,這四個大雁的圖片被識別為大雁
False negatives:有兩個,這兩個飛機被識別為大雁

Precision與Recall
Precision其實就是識別為飛機的圖片中,True positives所佔的比率:
precision = tp / (tp + fp) = tp / n
其中n表示(True positives + False positives),也就是系統一個識別為飛機的圖片數。該例子中,True positives為3,False positives為1,所以precision = 3 / (3 + 1) = 0.75,意味著識別為飛機的圖片中,真正為飛機的圖片佔比為0.75。

Recall是被正確識別出來飛機個數與測試集中所有真正飛機個數的比值:
recall = tp / (tp + fn)
Recall的分母是(True positives + False negatives),這兩個值的和,可以理解為一共有多少張真正的飛機圖片。該例子中,True positives為3,False negatives為2,那麼recall的值是3 / (3 + 2) = 0.6;即所有飛機圖片中,0.6的飛機被正確識別為飛機。

調整閾值
當然對某一個具體的模型而言precision和recall並不是一成不變的,而是隨著閾值的改變而改變的。當閾值以某一步伐從0變化到1,那麼就可以得到關於precision和recall生成的曲線,具體示意圖如下:
在這裡插入圖片描述
上圖為一個pr曲線的例子,並不表示上面例子的pr曲線結果,從pr曲線可以看到precision和recall是相反的,因而在實際專案當中需要根據具體的情況來選取合適的閾值。

相關文章