模型評估與選擇:分類模型和數值預測模型
分類模型評價指標
在我們建立了分類模型以後,接下來的問題自然是我們所建立的模型是好是壞。對於分類模型,我們會自然的想到:通過結果的準確率來判斷模型好壞,然而是否所有模型都能使用準確率這一指標來評價模型呢?什麼情況需要引入其他指標來評價模型好壞?有哪些指標呢?
首先,不同指標的基礎都是混淆矩陣。
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):預測類別和真實類別一致的樣本佔比。再回到我們開頭所提,準確率是否可以用於評估所有模型?答案是否定的,這涉及到一種類不平衡的問題。
note.類不平衡/類偏斜
例如在商業銀行信用風險檢測中,如果我們通過建模得到的預測準確率是99%,我們在瞭解數據之前可能會覺得:哇,準確率真高。但是如果我們瞭解實質數據情況,不難發現,違約客戶和正常客戶的比例往往存在嚴重的不平衡,違約客戶往往佔比很小。
假設某數據中違約用戶佔比1%,此時,你還會覺得模型預測準確率很高嗎?不盡然吧。在這種情況,如果我們還是使用準確率這個指標,難免會出錯。因爲,對於剛纔信用風險違約檢測的例子,就算我們把全部樣本都預測爲“不違約”,此時預測準確率仍然爲99%。但是,此時若銀行給真實會違約的客戶發放貸款,而客戶違約不還,這給銀行帶來的損失是巨大的。
此時,我們還需要引入精度Precision、召回率Recall、F1指標來評估模型性能。
2、精度Precision
我們以類1的precision
爲例,精度就是模型預測爲正例(類1)且真實是正例(類1)
的樣本佔所有預測爲正例(類1)
的樣本的比重。爲什麼要引入精度的概念呢?它比準確率好在哪呢?
精度用於評價模型預測效果,精度越大,說明對於我們關心的類別,模型假正例錯誤率越低(分母FP越小),模型預測正確的比例高(precision越大),模型性能較好。而不像準確率值考慮全部類別中預測正確的樣本佔比,precision研究的是我們關心的類別的預測準確率。
若上述商業銀行信用風險檢測的例子,我們預測樣本全部爲不違約,此時我們關心的類1(違約)
precision值爲0%,可以明顯的看出模型預測完全沒有效果。
Predict | |||
Actural | 類0 | 類1 | |
類0 | TN=99 | FP=0 | |
類1 | FN=1 | TP=0 |
下面要說的召回率Recall是類似的概念。
3、召回率Recall
同樣以類1的recall
爲例,召回率就是模型真實是正例(類1)且被準確預測爲正例(類1)
的樣本佔所有真實爲正例(類1)
的樣本的比重。同樣地,爲什麼要引入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 |
此時, 若我們想要增大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。
數值預測模型評價指標
上面介紹了分類模型的評價指標,下面我們介紹三種數值預測模型的性能評價指標。
令預測值爲,真實值爲。
1、均方誤差MSE(Mean Squared Error)-最常用
MSE均方誤差對模型效能評估更加精確,能夠在一定程度反映迴歸模型的不穩定型。
2、均方根誤差RMSE(Root Mean Square Error)
3、平均絕對誤差MAE(Mean Absolute Error)
MAE平均絕對誤差較少使用,因爲其數學性能較差。
評估分類器性能的方法——數據分割
上文已經介紹了模型性能的評價指標,下面我們討論如何在數據集角度評估分類器性能。對於已知的數據集要評價模型的好壞,如果用全部的數據建模,再用同樣的數據檢驗模型,不可避免會讓人懷疑模型的可靠性,因爲,這樣可能出現過擬合的情況,使得模型在訓練集上表現較好,但是在新的數據集上的表現很差。對於這種情形,我們需要劃分數據集,使得我們使用原始數據的一部分做訓練集建立模型,另一部分用作測試集進行模型評估。
1、保持方法(Hold-out)
將被標記的原始數據劃分爲兩個不相交的集合,分別稱爲訓練集和檢驗集(測試集)。在訓練集上歸納分類模型,在檢驗集上評估模型性能。
這個方法是我們接觸機器學習,最先接觸到的或者說在學校中最常用的方法,但是這個方法具有較多的侷限:
- 用於訓練的被標記樣本較少,此時對於原始數據量較少的情況,訓練出的模型可能較差。
- 模型可能過於依賴訓練集和測試集的構成,訓練集較小時模型的方差較大,容易欠擬合;訓練集較大時,測試集較小,可能估計不準確。
除此之外還要避免將數據集的前一部分做訓練集、後一部分做測試集,以免訓練出模型自身規律,往往需要將數據集打亂再進行數據分割。
2、k-折交叉驗證(cross-validation)
將原始數據(dataset)進行分爲k組,每組中一部分做爲訓練集(train set),另一部分做爲驗證集(validation set or test set),再每次運行時用訓練集對分類器進行訓練,再利用驗證集來測試訓練結果,循環k輪得到k個模型(model),將其誤差平均來做爲評價分類器的性能指標。
由k折交叉驗證可以衍生到“留一法”,即每次測試集只保留一個樣本,剩下N-1個樣本做訓練集,“留一法”常用於原始數據量很少的情況。
k折交叉驗證的優點:
1.信息利用充分
2.每塊數據集都可以使用一個算法,方便進行比較
3.最終精度爲平均值,精度提升
3、自助法(bootstrap)
自助法(Bootstrap Method,Bootstrapping或自助抽樣法)是一種從給定訓練集中有放回的均勻抽樣,也就是說,每當選中一個樣本,它等可能地被再次選中並被再次添加到訓練集中。
假設給定的數據集包含D個樣本。該數據集有放回地抽樣m次,產生m個樣本的訓練集。這樣原數據樣本中的某些樣本很可能在該樣本集中出現多次
。沒有進入該訓練集的樣本最終形成檢驗集(測試集)
。 顯然每個樣本被選中的概率是1/m,因此未被選中的概率就是,這樣一個樣本在訓練集中沒出現的概率就是m次都未被選中的概率,即.當m 時,這一概率就將趨近於,所以留在訓練集中的樣本大概就佔原來數據集的63.2%,即爲常說的0.632自助法。
數據分割總結
劃分策略:
1.當數據集D的規模較大時——(通常)訓練集,測試集
2.當數據集D的規模較小時——k折交叉驗證法(k-fold validation)
3.當數據集D的規模非常小時——留一法(leave one out)(k-fold validation的特例:重複N次,N爲樣本量)
參考文獻
《數據挖掘導論》
《數據挖掘概念與技術》
吳恩達機器學習課程