機器學習 評估方法 評價指標

2022-08-20 09:30:12 字數 4763 閱讀 3296

在選擇模型的時候,我們會選擇好的模型,丟棄不好的模型。模型的好或者不好是根據評價指標來衡量的,這篇文章介紹了分類任務中幾種常用的評價指標,包括:錯誤率(error rate)精度(accuracy)查準率(precision)查全率(recall)f1roc-auc

錯誤率(error rate)和精度(accuracy)是一對互補的指標,既可以應用於二分類任務,也可以應用於多分類任務。錯誤率是分類錯誤的樣本數佔總樣本數的比例,而精度是分類正確的樣本數佔總樣本數的比例。假設樣本總數為 n,分類錯誤的樣本為 m,則

\[\text = \frac \\

\text = \frac = 1 - \text

\]首先看一下真正例(true positive,tp)假正例(false positive,fp)真反例(true negative,tn)假反例(false negative,fn),用 tp、fp、tn、fn 分別代表這 4 類樣本的數量。假設問題為二分類問題(樣本有兩個類別:正例或者反例)。真正例和真反例都是我們的模型**對的那些樣本,比如對於一些樣本模型**為正例,實際也為正例,那麼這些樣本就是真正例 tp;模型**為反例,實際也為反例,那麼這些樣本就是真反例 tn。假正例和假反例是模型**錯誤的樣本:如果對於一些樣本模型**為正例,而實際為反例,說明模型**錯了,那麼這些樣本叫做假正例 fp(真假是對模型的**結果做判斷,而不是實際的結果);同樣地,如果對於一些樣本模型**為反例,而實際為正例,那麼這些樣本叫做假反例 fn。

上圖中的矩陣被稱為混淆矩陣(confusion matrix)。對於真正例(tp)、假正例(fp)、真反例(tn)和假反例(fn),有 tp + fp + tn + fn = 樣本總數,樣本中實際為正例的數量為 tp + fn,樣本中實際為反例的數量為 tn + fp。

有了 tp、fp、tn、fn,我們就可以定義查準率(precision,p,又稱「準確率」)查全率(recall,r,又稱「召回率」)

\[\text = \frac \\

\text = \frac

\]查準率就是我們模型**為正例的樣本(tp+fp)當中,實際為正例(tp)的比例,而查全率是實際為正例的樣本(tp+fn)當中,有多少被**為正例(tp),注意這裡不是 tp+fp,因為雖然 fp 也被**為正例,但 fp 不在 tp+fn 當中。

舉個例子,假設我們有 6 個樣本,樣本的實際標籤和模型**的標籤如下,1 代表正例,0 代表反例:

實際:[1, 1, 1, 0, 0, 0]

**:[1, 1, 0, 0, 1, 1]

那麼,查準率 = tp / (tp+fp) = 2 / (2+2) = 1/2,查全率 = tp / (tp + fn) = 2 / (2+1) = 2/3.

查準率和查全率是一對矛盾的度量。也就是說,查準率較高時,查全率會比較低;查全率較高時,查準率會比較低。使用單一的查準率或者查全率來度量乙個模型顯得有些片面,所以根據查準率(p)和查全率(r)引出了 f1 度量:

\[f_1 = \frac

\]f1 實際上是查準率和查全率的調和平均:\(\frac=\frac(\frac+\frac)\)。f1 度量綜合考慮了查準率和查全率。對於一些情況,我們比較重視查準率,例如推薦系統,而另一些情況我們更加重視查全率,例如在逃犯資訊檢索系統中,我們希望少漏掉逃犯。當對查準率和查全率有不同的重視情況時,我們可以使用 f1 度量的一般形式 \(f_\):

\[f_ = \frac

\]其中,\(\beta>0\) 度量了查全率對查準率的相對重要性。\(\beta=1\) 時,\(f_\) 退化為普通的 \(f1\),\(\beta>1\) 時查全率有更大的影響,\(\beta<1\) 時查準率有更大的影響。

有時,我們會得到多個混淆矩陣。例如,我們進行了多次訓練和測試,每次都能得到乙個混淆矩陣;或者是在多分類任務中,每兩個類別都對應乙個混淆矩陣。假如我們想要根據這 n 個混淆矩陣中綜合考察查準率和查全率。一種方法是我們可以先對每個混淆矩陣計算查準率(p)和查全率(r),對於 n 個混淆矩陣,有 \((p_1, r_1),(p_2,r_2),\dots,(p_n,r_n)\),然後計算查準率的平均值,可以得到巨集查準率(macro-p);計算查全率的平均值,可以得到巨集查全率(macro-recall);根據巨集查準率和巨集查全率,可以得到巨集f1(macro-f1)

\[\text = \frac\sum_^np_i \\

\text = \frac\sum_^nr_i \\

\text = \frac*\text}+\text}

\]還有一種方法就是先計算出所有混淆矩陣中 tp、fp、tn、fn 的平均值 \(\overline、\overline、\overline、\overline\),然後再基於這些平均值計算出微查準率(micro-p)微查全率(micro-r)微f1(micro-f1)

\[\text = \frac}+\overline} \\

\text = \frac}+\overline} \\

\text = \frac*\text}+\text}

\]很多分類模型的輸出是乙個概率,我們將輸出的概率與閾值比較,如果輸出概率大於閾值,則**為正例,否則**為反例. 我們將輸出概率降序排序,閾值實際上就是輸出概率中的乙個截斷點,在該截斷點前的樣本都是正例,之後的都是反例。這樣的話,假設有 n 個樣本,就會有 n 個輸出概率,我們將這 n 個概率降序排序,然後每次拿乙個概率作為截斷點,該截斷點之前的都**為正例,之後的都**為反例。每次分類後計算兩個值叫做假正例率(false positive rate,fpr)真正例率(true positive rate,tpr)

\[\text = \frac \\

\text = \frac

\]將座標(fpr,tpr)畫在二維座標系中,就會得到roc曲線(receiver operating characteristic,受試者工作特徵),如下圖:

roc 曲線下的面積叫做auc(area under curve),圖中的斜對角虛線代表隨機猜測的模型。隨機猜測的 auc 是 0.5,所以正常情況下,roc-auc 的取值範圍為 [0.5, 1]。左圖是理想情況,而實際只有有限個樣本,所以 roc 曲線並不是光滑的。如果模型 a 的 auc 大於 模型 b 的 auc,我們說模型 a 優於模型 b。

auc 還可以從概率角度進行解釋:我們取乙個正例和乙個負例,模型將正例**為正例的概率大於模型將負例**為正例的概率的概率就是 auc。或者說,模型根據樣本的輸出值將正例排在負例前面的概率就是 auc。從這個角度,我們可以很容易地計算 auc:給定正樣本m個,負樣本n個,以及他們的**概率(0-1)之間,那麼 auc 的含義就是所有窮舉所有的正負樣本對,如果正樣本的**概率大於負樣本的**概率,那麼就+1;如果如果正樣本的**概率等於負樣本的**概率,那麼就+0.5, 如果正樣本的**概率小於負樣本的**概率,那麼就+0;最後把統計處理的個數除以m×n就得到我們的 auc,公式描述如下:

\[\frac,p_)}

\]**實現如下:

def roc_auc(y_true, y_pred):

pos = [i for i in range(len(y_true)) if y_true[i]==1]

neg = [i for i in range(len(y_true)) if y_true[i]==0]

score = 0

for i in pos:

for j in neg:

if y_pred[i]>y_pred[j]:

score += 1

elif y_pred[i]==y_pred[j]:

score += 0.5

return score/(len(pos)*len(neg))

測試:

y_true = [1,1,0,0,0]

y_pred = [0.3,0.8,0.1,0.5,0.4]

roc_auc(y_true, y_pred) # 0.6666666666666666

sklearn.metrics.roc_auc_score(y_true, y_pred) # 0.6666666666666667

y_true = [1,1,0,0,0,1,1,0,0]

y_pred = [0.3,0.8,0.1,0.5,0.4,0.6,0.7,0.2,0.3]

roc_auc(y_true, y_pred) # 0.875

sklearn.metrics.roc_auc_score(y_true, y_pred) # 0.875

1、周志華《機器學習》

機器學習 評估指標

2.1 錯誤率與精度 m個樣本,有a個分錯。錯誤率 e a m 精度 acc 1 a m 2.2 查準率 查全率和f1 tp 真正例 tn 真反例 fp 假正例 fn 假反例 查準率 p tptp fp 查全率 r tptp fn f1是查準率和查全率的調和平均數 1f 1 12 1p 1r 即 f...

機器學習 評價指標整理

目錄 1.準確率 accuracy 2.召回率 recall 3.精確率 precision 4.召回率與精確率的關係 5.誤報率 fpr 與漏報率 fnr 準確率是指我們的模型 正確的結果所佔的比例。正式點說,準確率的定義如下 accuracy frac 對於二元分類,也可以根據正類別和負類別按如...

機器學習評價方法

precision 的結果中 正確的正例 的結果中所有為1的值 recall 的結果中 正確的正例 真實存在的正例數 所以p r curve 對負樣本的比例不敏感 1 真陽性 true positive,tp 檢測不健康,且實際不健康 正確肯定的匹配數目 2 假陽性 false positive,f...