模型性能度量
對學習器的泛化性能的評估,不僅需要有效可行的試驗評估方法,還需要有模型泛化能力的評價標準,這就是性能度量(performance measure),性能度量反映了任務需求,在對比不同模型的能力時,使用不同的性能度量往往會導致不同的評判結果,這意味著模型的“好壞”是相對的,什麽樣的模型是好的,不僅取決於算法和數據,還決定於任務需求。
在預測任務中,給定樣例集D={(x1,y1),(x2,y2),......,(xm,ym)},其中yi是示例xi的真是標記,要評估學習器f的性能,就要把學習器預測結果f(x)與真實標記y進行比較,回歸任務最常用的性能度量是“均方誤差”(mean squared error):
更一般的,對於數據分布D和概率密度函數p(?),均方誤差可描述為:
下面以分類任務為例討論常用的性能度量。
錯誤率與精度
錯誤率和精度是分類任務中最常用的兩種性能度量,既適用於二分類任務,也適用於多分類任務,錯誤率是分類錯誤的樣本數占樣本總數的比例,精度則是分類正確的樣本數占樣本總數的比例,對樣例集D,分類錯誤率定義為:
精度定義為:
更一般的,對於數據分布D和概率密度函數p(?),錯誤率和精度可分別描述為:
查準率,查全率與F1
錯誤率和精度雖常用,但 並不能滿足所有任務需求,以西瓜問題為例,假定瓜農拉來一車西瓜,我們用訓練好的模型對這些西瓜進行判別,顯然,錯誤率衡量有多少比例的西瓜被判別錯誤,但是若我們關心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比例被挑了出來”,那麽錯誤率顯然就不夠用了,這是需要使用其他的性能度量,類似的需求在信息檢索,web搜索等應用中經常出現,例如在信息檢索中,我們經常會關心“檢索出的信息中有多少比例是用戶感興趣的”,“用戶感興趣的信息中有多少被檢索出來了”。“查準率”與“查全率”是更為實用與此類需求的性能度量。
對於二分類問題,可將樣例根據其真實類別與學習器預測類別的組合劃分為真正例(true positive),假正例(false positive),真反例(true negative),假反例(false negative)四種情形,令TP,FP,TN,FN分別表示其對應的樣例數,則顯然有TP+FP+TN+FN=樣例總數,分類結果的“混淆矩陣”:
真實情況 | 預測結果 | |
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
查準率P與查全率R分別定義為:
查準率和查全率是一對矛盾的度量,一般來說,查準率高時,查全率往往偏低,而查全率高時,查準率往往偏低。通常只有在一些簡單任務中,才可能使查全率和查準率都很高。
我們可以根據學習器的預測結果對樣例進行排序,排在前面是學習器認為“最可能”是正例的樣本,排在最後的則是學習器認為“最不可能”是正例的樣本,按此順序逐個把樣本作為正例進行預測,則每次可以計算出當前的查全率,查準率。以查準率為縱軸,查全率為橫軸作圖,就得到查準率-查全率曲線,簡稱“P-R曲線”,顯示該曲線的圖稱為“P-R圖”:
P-R圖直觀地顯示出學習器在樣本總體上的查全率,查準率。在進行比較時,若一個學習器的P-R曲線被另一個學習器的曲線完全"包住",則可斷言後者的性能優於前者,例如上圖中學習器A的性能優於學習器C,如果兩個學習器的P-R曲線發生了交叉,例如上圖中的A和B,則難以一般性的斷言哪個更優,只能在具體的查準率或者查全率條件下進行比較,然而很多情形下,人們往往仍希望把學習器A和B比個高低,這時一個比較合理的判據是比較P-R曲線下面積的大小,它在一定程度上表征了學習器在查準率和查全率上取得相對“雙高”的比例,但這個值不太容易估算,因此人們設計了一些綜合考慮查準率,查全率的性能度量:
平衡點(Break-Event Point,簡稱BEP):“查準率=查全率”時的取值。例如上圖中基於BEP的比較,可認為學習器A優於B。
但是BEP還是過於簡化了些,更常用的是F1度量:
F1度量的一般形式——F?,能讓我們表達出對查準率/查全率的不同偏好:
其中?>0度量了查全率對查準率的相對重要性,?=1時退化為標準的F1,?>1時查全率有更大影響,?<1時查準率有更大影響。
如果我們進行多次訓練/測試,或者在多個數據集上進行訓練/測試,我們希望估計算法的“全局性能”,甚或者執行多分類任務,每兩兩類別的組合都對應一個混淆矩陣,那麽就會得到多個混淆矩陣,我們希望在n個二分類混淆矩陣上綜合考慮查準率和查全率,一種直接的方法是先在各混淆矩陣上分別計算出查準率和查全率,記為(P1,R1),(P2,R2),......,(Pn,Rn),再計算平均值,這樣就得到“宏查準率”(macro-P),“宏查全率”(macro-R),以及相應的“宏F1”(macro-F1):
還可以先將混淆矩陣的對應元素進行平均,得到TP,FP,TN,FN的平均值,分別記為,再基於這些平均值計算出“微查準率”(micro-P),“微查全率”(micro-R)和“微F1”(micro-F1):
ROC和AUC
很多學習器是為測試樣本產生一個實值或概率預測,然後將這個預測值與一個分類閾值進行比較,大於閾值則分為正類,否則為反類,這個實值或概率預測結果的好壞直接決定了學習器的泛化能力,實際上,我們可以根據這個實值或概率預測結果將測試樣本進行排序,“最可能”是正例排在最前面,“最不可能”是正例的排在最後面,這樣,分類過程就相當於在這個排序中以某個“截斷點”(cut point)將樣本分為兩部分,前一部分判為正例,後一部分則判為反例,在不同的應用任務中,我們可根據任務需求來采用不同的截斷點,例如我們更重視“查準率”,則可選擇排序中靠前的位置進行截斷,若更重視“查全率”,則可選擇更靠後的位置進行截斷,因此排序質量的好壞體現了綜合考慮學習器不同任務下的“期望泛化性能”的好壞,ROC曲線則是從這個角度出發來研究學習器泛化性能的有力工具。
ROC:Receiver Operating Characteristic(受試者工作特征)曲線,以“真正例率”(True Positive Rate,簡稱TPR)為縱軸,以“假正例率”(False Positive Rate,簡稱FPR)為橫軸:
顯示ROC曲線的圖稱為“ROC圖”,下圖(a)給出了一個示意圖,顯然,對角線對應於“隨機猜測”模型,而點(0,1)則對應於將所有正例排在所有反例之前的“理想模型”。
現實任務中通常是利用有限個測試樣例來繪制ROC圖,此時僅能獲得有限個(真正例率,假正例率)坐標對,無法產生上圖(a)中的光滑ROC曲線,只能繪制上圖(b)中所示的近似ROC曲線。進行學習器比較時,與P-R圖相似,若一個學習器的ROC曲線被另一個學習器的曲線完全"包住",則可斷言後者的性能優於前者,若兩個學習器的ROC曲線發生交叉,則難以比較,此時如果一定要進行比較,比較合理的判據是比較ROC曲線下的面積,即AUC(Area Under ROC Curve),如上圖所示。
從定義可知,AUC可通過對ROC曲線下各部分的面積求和而得,假定ROC曲線是由坐標為{(x1,y1),(x2,y2),......,(xm,ym)}的點按序鏈接而形成(x1=0,xm=1),參見上圖(b),則AUC可估算為:
形式化地看,AUC考慮的是樣本預測的排序質量,因此它與排序誤差有緊密聯系,給定m+個正例和m-個反例,令D+和D-分別表示正,反例集合,則排序“損失”(loss)定義為:
即考慮每一對正,反例,若正例的預測值小於反例,則記一個“罰分”,若相等,則記0.5個“罰分”,很容易看出lrank對應的是ROC曲線之上的面積:若一個正例在ROC曲線上對應標記點的坐標為(x,y),則x恰是排序在其之前的反例所占的比例,即假正例率,因此有:AUC=1-lrank。
代價敏感錯誤率與代價曲線
在現實任務中,不同類型的錯誤所造成的後果可能不同,為權衡不同類型錯誤所造成的不同損失,可為錯誤賦予“非均等代價”,以二分類為例,我們可以根據任務的領域知識設定一個“代價矩陣”,如下表所示,其中costij表示將第i類樣本預測為第j類樣本的代價,一般來說,costii=0,若將第0類判別為第1類所造成的損失更大,則cost01>cost10,損失程度相差越大,cost01與cost10值的差別越大。
真實類別 | 預測類別 | |
第0類 | 第1類 | |
第0類 | 0 | cost01 |
第1類 | cost10 | 0 |
前面我們都隱式地假設了均等代價,並沒有考慮不同錯誤會造成不同的後果,在非均等代價下,我們所希望的不再是簡單地最小化錯誤次數,而是希望最小化“總體代價”,若將第0類作為正類,第1類作為反類,令D+與D-分別代表樣例集D的正例子集和反例子集,則“代價敏感”錯誤率為:
類似可給出基於分布定義的代價敏感錯誤率以及其他一些性能度量,如精度的代價敏感版本,若令costij中的i,j取值不限於0,1,則可定義出多分類任務的代價敏感性能度量。在非均等代價下,ROC曲線不能直接反映出學習器的期望總體代價,而“代價曲線”(cost curve)則可達到目的,代價曲線圖的橫軸是取值為[0,1]的正例概率代價:
其中p是樣例為正例的概率,縱軸是取值為[0,1]的歸一化代價:
其中FPR是假正例率,FNR=1-FPR是假反例率,代價曲線所圍成的面積即為在所有條件下學習器的期望總體代價,如下圖所示:
模型性能度量