一、原理講解
p-r曲線就是精確率precision vs 召回率recall 曲線,以recall作為橫座標軸,precision作為縱座標軸。首先解釋一下精確率和召回率。
解釋精確率和召回率之前,先來看下混淆矩陣,負正
負tnfp正
fntp
把正例正確分類為正例,表示為tp(true positive),把正例錯誤分類為負例,表示為fn(false negative),
把負例正確分類為負例,表示為tn(true negative), 把負例錯誤分類為正例,表示為fp(false positive)
精確率和召回率可以從混淆矩陣中計算而來,precision = tp/(tp + fp), recall = tp/(tp +fn)
那麼p-r曲線是怎麼來的呢?
演算法對樣本進行分類時,都會有置信度,即表示該樣本是正樣本的概率,比如99%的概率認為樣本a是正例,1%的概率認為樣本b是正例。通過選擇合適的閾值,比如50%,對樣本進行劃分,概率大於50%的就認為是正例,小於50%的就是負例。
通過置信度就可以對所有樣本進行排序,再逐個樣本的選擇閾值,在該樣本之前的都屬於正例,該樣本之後的都屬於負例。每乙個樣本作為劃分閾值時,都可以計算對應的precision和recall,那麼就可以以此繪製曲線。那很多書上、部落格上給出的p-r曲線,都長這樣
當然,這種曲線是有可能的。但是仔細琢磨就會發現一些規律和一些問題。
根據逐個樣本作為閾值劃分點的方法,可以推敲出,recall值是遞增的(但並非嚴格遞增),隨著劃分點左移,正例被判別為正例的越來越多,不會減少。而精確率precision並非遞減,二是有可能振盪的,雖然正例被判為正例的變多,但負例被判為正例的也變多了,因此precision會振盪,但整體趨勢是下降。
另外p-r曲線肯定會經過(0,0)點,比如講所有的樣本全部判為負例,則tp=0,那麼p=r=0,因此會經過(0,0)點,但隨著閾值點左移,precision初始很接近1,recall很接近0,因此有可能從(0,0)上公升的線和座標重合,不易區分。如果最前面幾個點都是負例,那麼曲線會從(0,0)點開始逐漸上公升。
曲線最終不會到(1,0)點。很多p-r曲線的終點看著都是(1,0)點,這可能是因為負例遠遠多於正例。
最後乙個點表示所有的樣本都被判為正例,因此fn=0,所以recall = tp/(tp + fn) = 1, 而fp = 所有的負例樣本數,因此precision = tp/(tp+fp) = 正例的佔所有樣本的比例,故除非負例數很多,否則precision不會為0.
二、通過pr曲線判斷分類器效能
如果乙個學習器的p-r曲線被另乙個學習器的p-r曲線完全包住,則可斷言後者的效能優於前者,例如上面的a和b優於學習器c。但是a和b的效能無法直接判斷,我們可以根據曲線下方的面積大小來進行比較,但更常用的是平衡點或者是f1值。平衡點(bep)是p=r時的取值,如果這個值較大,則說明學習器的效能較好。而f1 = 2 * p * r /( p + r ),同樣,f1值越大,我們可以認為該學習器的效能較好。
補充:
roc曲線(類似於pr曲線的另一種曲線)中,越接近左上角的曲線越好。
auc (area under curve):roc曲線下的面積,介於0.1和1之間,作為數值可以直觀的評價分類器的好壞,值越大越好。
auc = 1,是完美分類器,採用這個**模型時,存在至少乙個閾值能得出完美**。絕大多數**的場合,不存在完美分類器。
0.5 < auc < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有**價值。
auc = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有**價值
參考說明
Python下通過PR曲線值計算AP
直接放 從官方那邊摳出來的ap計算 內部分為voc2007之前的11點計算方法和voc2007之後的方法,目前都已經採用else 內的計算方法 import numpy as np def voc ap rec,prec,use 07 metric false ap voc ap rec,prec,...
貝塞爾曲線初探及原理
貝塞爾曲線,可以通過三個點,來確定一條平滑的曲線。在計算機圖形學應該有講。是圖形開發中的重要工具。實現的是乙個圖形做圓周運動。不過不是簡單的關鍵幀動畫那樣,是計算出了很多點,當然還是用的關鍵幀動畫,即使用cakeyframeanimation。有了貝塞爾曲線的支援,可以賦值給cakeyframean...
高斯曲線擬合原理及實現
高斯 擬合 gaussian fitting 即使用形如 gi x ai exp x bi 2 ci 2 的高斯函式 對資料點集進行函式逼近的 擬合方法。其實可以跟 多項式擬合 模擬起來,不同的是 多項式擬合是用 冪函式系,而高斯擬合是用 高斯函式 系。使用 高斯函式 來進行擬合,優點在於計算積分十...