機器學習——模型評估與選擇(保持方法、交叉驗證、自助法、混淆矩陣、精度、召回率、F1值)[超詳細]

分類模型評價指標

在我們建立了分類模型以後,接下來的問題自然是我們所建立的模型是好是壞。對於分類模型,我們會自然的想到:通過結果的準確率來判斷模型好壞,然而是否所有模型都能使用準確率這一指標來評價模型呢?什麼情況需要引入其他指標來評價模型好壞?有哪些指標呢?
首先,不同指標的基礎都是混淆矩陣。

1、混淆矩陣

混淆矩陣也稱誤差矩陣,是表示精度評價的一種標準格式,用n行n列的矩陣形式來表示.混淆矩陣的每一列代表了預測類別,每一列的總數表示預測爲該類別的數據的數目;每一行代表了數據的真實歸屬類別,每一行的數據總數表示該類別的數據實例的數目。

對於二分類問題的混淆矩陣:
Predict
Actural 類0 類1
類0 TN(真負例) FP(假正例)
類1 FN(假負例) TP(真正例)

如上圖,混淆矩陣就是根據已知數據所建立的模型,對樣本預測的類別和真實類別的分佈情況。
其中,TP爲Ture Positive:真正例,就是樣本本身爲正例(類1)被分類模型預測成正類(類1)的數量;
FP爲False Positive:假正例,就是樣本本身爲負例(類0)被分類模型錯誤預測成正類(類1)的數量;
TN爲Ture Negative:真負例,就是樣本本身爲負例(類0)被分類模型預測成負類(類0)的數量;
FN爲False Negative:假負例,就是樣本本身爲正例(類1)被分類模型錯誤預測成負類(類0)的數量。

2、模型準確率Accuracy

根據混淆矩陣,最常見的指標就是準確率(Accuracy):預測類別和真實類別一致的樣本佔比。Accuracy=TP+TNTP+FP+TN+FNAccuracy=\frac{TP+TN}{TP+FP+TN+FN}再回到我們開頭所提,準確率是否可以用於評估所有模型?答案是否定的,這涉及到一種類不平衡的問題。

note.類不平衡/類偏斜

例如在商業銀行信用風險檢測中,如果我們通過建模得到的預測準確率是99%,我們在瞭解數據之前可能會覺得:哇,準確率真高。但是如果我們瞭解實質數據情況,不難發現,違約客戶和正常客戶的比例往往存在嚴重的不平衡,違約客戶往往佔比很小。
假設某數據中違約用戶佔比1%,此時,你還會覺得模型預測準確率很高嗎?不盡然吧。在這種情況,如果我們還是使用準確率這個指標,難免會出錯。因爲,對於剛纔信用風險違約檢測的例子,就算我們把全部樣本都預測爲“不違約”,此時預測準確率仍然爲99%。但是,此時若銀行給真實會違約的客戶發放貸款,而客戶違約不還,這給銀行帶來的損失是巨大的。
此時,我們還需要引入精度Precision、召回率Recall、F1指標來評估模型性能。

2、精度Precision

我們以類1的precision爲例,精度就是模型預測爲正例(類1)且真實是正例(類1)的樣本佔所有預測爲正例(類1)的樣本的比重。precision=TPTP+FPprecision=\frac{TP}{TP+FP}爲什麼要引入精度的概念呢?它比準確率好在哪呢?
精度用於評價模型預測效果,精度越大,說明對於我們關心的類別,模型假正例錯誤率越低(分母FP越小),模型預測正確的比例高(precision越大),模型性能較好。而不像準確率值考慮全部類別中預測正確的樣本佔比,precision研究的是我們關心的類別的預測準確率。
若上述商業銀行信用風險檢測的例子,我們預測樣本全部爲不違約,此時我們關心的類1(違約)precision值爲0%,可以明顯的看出模型預測完全沒有效果。

預測都不違約(全爲類0):
Predict
Actural 類0 類1
類0 TN=99 FP=0
類1 FN=1 TP=0

下面要說的召回率Recall是類似的概念。

3、召回率Recall

同樣以類1的recall爲例,召回率就是模型真實是正例(類1)且被準確預測爲正例(類1)的樣本佔所有真實爲正例(類1)的樣本的比重。recall=TPTP+FNrecall=\frac{TP}{TP+FN}同樣地,爲什麼要引入Recall召回率的概念呢?
召回率越大,說明對於我們關心的類別,模型預測正確的比例高,模型假負例錯誤率越低(分母FN越小),模型性能較好。而不像準確率值考慮全部類別中預測正確的樣本佔比,recall研究的是我們關心的類別的預測準確率。
對於上述商業銀行信用風險檢測的例子,我們預測樣本全部爲不違約,此時我們關心的類1(違約)的recall值爲0%,可以明顯的看出模型預測完全沒有效果。

4、Precision和Recall的trade off——F1指標

看到這,可能有小夥伴會想:對於上述問題,如果換成是對類0(不違約)的precision和recall值就會得出完全不同的結果。是的,這也正是爲什麼對於類不平衡的問題更需要這兩個指標的原因。在類不平衡的數據集中,往往會涉及到代價敏感度的問題。什麼是代價敏感度呢?

代價敏感性(cost sensitive),指的是在分類問題中,當把某一類A錯誤的分成了類B,會造成巨大的損失,例如在欺詐檢測中,如果把欺詐用戶錯誤的分成了優質客戶,那麼這會使得欺詐用戶不會受到懲罰而繼續欺詐。

所以,我們遇到類不平衡的問題時,需要考慮我們關心的那一類的指標值。比如,對於商業銀行信用風險檢測,我們關心違約(類1)的樣本。在癌症患者預測中,預測錯誤(把癌症病人預測成非癌症患者)而使癌症病人錯過最佳治療時間,所帶來的損失巨大,我們關心患癌症(類1)的樣本。此時,我們計算的指標值就是所關心的那一類樣本的,往往把我們關心的樣本設定爲類1。
下面,我們通過一個例子更好的瞭解precision和recall的計算公式和關聯。
假如對於一個分類問題,我們得到混淆矩陣如下:(假設已將關心的類別設定爲正類1)

Predict
Actural 類0 類1
類0 TN=160 FP=30
類1 FN=20 TP=60

此時,accuracy=TP+TNTP+FP+TN+FN=81.48%accuracy=\frac{TP+TN}{TP+FP+TN+FN}=81.48\% precision=TPTP+FP=66.67%precision=\frac{TP}{TP+FP}=66.67\% recall=TPTP+FN=75%recall=\frac{TP}{TP+FN}=75\% 若我們想要增大recall召回率,此時需要減少FN,即當我們全部猜爲正例(類1):

Predict
Actural 類0 類1
類0 TN=0 FP=190
類1 FN=0 TP=80

此時precision爲29.63%,但是此時recall爲100%,此時模型具有完美的召回率但精度卻很差。相反,若我們想要增大precision精度,此時需要減少FP,即當我們匹配訓練集中任何一個正例樣本都指派爲正例(類1)此時FP最小爲0:

Predict
Actural 類0 類1
類0 TN=0 FP=0
類1 FN=180 TP=90

此時recall爲33.33%,但是此時precision爲100%,此時模型具有完美的精度,但是recall卻很差。
由上,我們得出,精度precision和召回率recall的值是此消彼長的。此時precision和recall的trade off(權衡)就顯得尤爲重要。我們可以通過犧牲precision來提高recall,也可以通過犧牲recall來提升precision。那我們能否找到一個指標,能夠同時檢驗precision和recall的值呢?
這時,我們可能會想到最常用的求平均的方法,那麼這個算數平均可行嗎?
答案是否定的,因爲算數平均數很容易受極端值的影響,而我們上面舉的兩個例子precision和recall的值相差較大,無法評估。
調和平均值就發揮出了作用,通過求precision和recall的調和平均值,我們衍生出了FI-measure。F1=2precisionrecallprecision+recallF_1=\frac{2*precision*recall}{precision+recall}

數值預測模型評價指標

上面介紹了分類模型的評價指標,下面我們介紹三種數值預測模型的性能評價指標。
令預測值爲yi^\hat{y_i},真實值爲yiy_i

1、均方誤差MSE(Mean Squared Error)-最常用

MSE=1Ni=1N(yi^yi)2MSE=\frac{1}{N}\sum_{i=1}^{N}(\hat{y_i}-y_i)^2MSE均方誤差對模型效能評估更加精確,能夠在一定程度反映迴歸模型的不穩定型。

2、均方根誤差RMSE(Root Mean Square Error)

RMSE=1Ni=1N(yi^yi)2RMSE=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(\hat{y_i}-y_i)^2}

3、平均絕對誤差MAE(Mean Absolute Error)

MAE=1Ni=1Nyi^yiMAE=\frac{1}{N}\sum_{i=1}^{N}|\hat{y_i}-y_i|MAE平均絕對誤差較少使用,因爲其數學性能較差。

評估分類器性能的方法——數據分割

上文已經介紹了模型性能的評價指標,下面我們討論如何在數據集角度評估分類器性能。對於已知的數據集要評價模型的好壞,如果用全部的數據建模,再用同樣的數據檢驗模型,不可避免會讓人懷疑模型的可靠性,因爲,這樣可能出現過擬合的情況,使得模型在訓練集上表現較好,但是在新的數據集上的表現很差。對於這種情形,我們需要劃分數據集,使得我們使用原始數據的一部分做訓練集建立模型,另一部分用作測試集進行模型評估。

1、保持方法(Hold-out)

將被標記的原始數據劃分爲兩個不相交的集合,分別稱爲訓練集和檢驗集(測試集)。在訓練集上歸納分類模型,在檢驗集上評估模型性能。


這個方法是我們接觸機器學習,最先接觸到的或者說在學校中最常用的方法,但是這個方法具有較多的侷限:

  1. 用於訓練的被標記樣本較少,此時對於原始數據量較少的情況,訓練出的模型可能較差。
  2. 模型可能過於依賴訓練集和測試集的構成,訓練集較小時模型的方差較大,容易欠擬合;訓練集較大時,測試集較小,可能估計不準確。
    除此之外還要避免將數據集的前一部分做訓練集、後一部分做測試集,以免訓練出模型自身規律,往往需要將數據集打亂再進行數據分割。

2、k-折交叉驗證(cross-validation)

將原始數據(dataset)進行分爲k組,每組中一部分做爲訓練集(train set),另一部分做爲驗證集(validation set or test set),再每次運行時用訓練集對分類器進行訓練,再利用驗證集來測試訓練結果,循環k輪得到k個模型(model),將其誤差平均來做爲評價分類器的性能指標。

上圖爲10折交叉驗證
由k折交叉驗證可以衍生到“留一法”,即每次測試集只保留一個樣本,剩下N-1個樣本做訓練集,“留一法”常用於原始數據量很少的情況。
k折交叉驗證的優點:
1.信息利用充分
2.每塊數據集都可以使用一個算法,方便進行比較
3.最終精度爲平均值,精度提升

3、自助法(bootstrap)

自助法(Bootstrap Method,Bootstrapping或自助抽樣法)是一種從給定訓練集中有放回的均勻抽樣,也就是說,每當選中一個樣本,它等可能地被再次選中並被再次添加到訓練集中。

假設給定的數據集包含D個樣本。該數據集有放回地抽樣m次,產生m個樣本的訓練集。這樣原數據樣本中的某些樣本很可能在該樣本集中出現多次沒有進入該訓練集的樣本最終形成檢驗集(測試集)。 顯然每個樣本被選中的概率是1/m,因此未被選中的概率就是(11m)(1-\frac{1}{m}),這樣一個樣本在訓練集中沒出現的概率就是m次都未被選中的概率,即(11m)m(1-\frac{1}{m})^m.當m \rightarrow \infty時,這一概率就將趨近於e1=0.368e^{-1}=0.368,所以留在訓練集中的樣本大概就佔原來數據集的63.2%,即爲常說的0.632自助法。

數據分割總結

劃分策略:
1.當數據集D的規模較大時——(通常)訓練集23D\frac{2}{3}D,測試集13D\frac{1}{3}D
2.當數據集D的規模較小時——k折交叉驗證法(k-fold validation)
3.當數據集D的規模非常小時——留一法(leave one out)(k-fold validation的特例:重複N次,N爲樣本量)

參考文獻

《數據挖掘導論》
《數據挖掘概念與技術》
吳恩達機器學習課程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章