我們知道,在很多學習器中是通過將既定的閾值與學習器對測試樣本**值(實值/概率)進行比較。如果大於閾值則將其判為正類樣本,小於閾值將其判為負類樣本。這個實值或者概率**結果的好壞,直接決定了學習器的泛化能力。
我們可以根據學習器的**結果對測試樣本進行排序,將最有可能的正例排在前邊,最不可能的排在後面。這樣我們可以在這個序列中放置乙個截斷點來將樣本分為兩類,前面一部分判為正例,後面一部分判為負例。
所以根據學習器的**值所產生的排序的好壞,體現了綜合考慮學習器在不同任務下的「期望泛化效能」的好壞。而roc曲線就是從這個角度出發來研究學習器泛化效能的有力工具。所謂roc曲線,全稱為receiver operating characteristic(受試者工作特徵)曲線 ,它的縱軸為真正例率tpr(true positive rate),橫軸為假正例率fpr(false positive rate),分別定義為:
真正例率就是學習器認為的正例佔所有正例的比率,也就是我們通常所說的查全率或者召回率。假正例率就是在所有的負例中學習器認為是正例的比率。
此外,為了更好地講解我們再引入兩個常用的錯誤率度量,分別是錯誤接受率far(false acceptance rate)和錯誤拒絕率frr(false reject rate),分別定義為:
錯誤接受率就是所有的負例裡面被學習器誤認為是正例的比率,錯誤拒絕率就是所有的正例裡面被學習器誤認為是負例的比率。我們可以很容易觀察到far = fpr, frr = 1 - tpr。接下來我們會用到這個性質。
給定m個正例和n個反例,根據學習器對這m+n個測試樣本進行**,根據**概率或實值將樣本進行由可能性大到小的排序。
將分類閾值設為最大,即將所有的樣本都分類為反例,這時tpr = fpr = 0,因為此時沒有任何樣例被判為正例。
將閾值依次設為分類樣本的**值,也就是按照排序依次將樣例每個樣例劃分為正例。然後計算tpr和fpr,設上乙個roc曲線上的點的座標為(x,y),如果當前樣例是正例即學習器判斷正確,那麼當前roc上的點應為(x,y+1/m);如果當前樣例是負例即學習器判斷錯誤,那麼當前roc上的點應為(x + 1/n , y)。將所有的點描出來然後用線段連線即可。借鑑西瓜書上的,繪製後的roc曲線如下:
我們在roc曲線上將座標點(0,1)和(1,0)連線起來,與roc曲線的交點所對應的fpr值就是eer 。
通過上述eer的定義我們可以發現:eer是fpr = 1 - tpr時的fpr值,回顧第一節我們可以知道,fpr其實就是far,而frr= 1 - tpr。所以eer又是frr與far相等時的值,即錯誤接受率與錯誤拒絕率相等時的值,所以稱之為等錯誤率即equal error rate。
P R曲線深入理解
p r曲線就是精確率precision vs 召回率recall 曲線,以recall作為橫座標軸,precision作為縱座標軸。首先解釋一下精確率和召回率。不過在解釋精確率和召回率之前,先來看下混淆矩陣,負 正負 tn fp 正fn tp把正例正確分類為正例,表示為tp true positiv...
深入理解Lambda函式及其用法
1.函式式程式設計 例如 乙個整數列表,要求按照列表中元素的絕對值大小公升序排列 list1 3,5,4,1,0,2,6 sorted list1,key lambda x abs x 0,1,2,3,4,5,6 排序函式sorted支援接收乙個函式作為引數,該引數作為 sorted的排序依據,這裡...
深入理解Lambda函式及其用法
lambda函式又稱匿名函式,匿名函式就是沒有名字的函式,函式沒有名字也行?當然可以啦。有些函式如果只是臨時一用,而且它的業務邏輯也很簡單時,就沒必要非給它取個名字不可。先來看個簡單lambda函式 lambda x,y x y lambda at 0x102bc1c80 x和y是函式的兩個引數,冒...