- 文章從模型評估的基本概念開始,分別介紹了常見的分類模型的評估指標和回歸模型的評估指標以及這些指標的局限性。部分知識點舉例加以闡述,以便加深理解。思維導圖如下:

1 基本概念
-
模型評估用來評測模型的好壞。
-
模型在訓練集上的誤差通常稱為 訓練誤差 或 經驗誤差,而在新樣本上的誤差稱為 泛化誤差。顯然,機器學習的目的是得到泛化誤差小的學習器。然而,在實際應用中,新樣本是未知的,所以只能使訓練誤差盡量小。
-
所以,為了得到泛化誤差小的模型,在構建機器模型時,通常將數據集拆分為相互獨立的訓練數據集、驗證數據集和測試數據集等,而在訓練過程中使用驗證數據集來評估模型並據此更新超參數,訓練結束后使用測試數據集評估訓練好的最終模型的性能。
-
模型的比較:
- 一次訓練過程中的模型比較。
- 多次訓練模型比較。
- 不同算法的模型比較。
2 評估指標的局限性
- 在模型評估過程中,分類問題、排序問題、回歸問題往往需要使用不同的指標進行評估。在諸多的評估指標中,大部分指標只能片面地反映模型的一部分性能。如果不能合理地運用評估指標,不僅不能發現模型本身的問題,而且會得出錯誤的結論。
3 分類模型的評估指標
- 正樣本:需要判定概率為1的類型的樣本叫做正樣本。
- 負樣本:需要判定概率為0的類型的樣本叫做負樣本。
3.1 混淆矩陣(Confusion Matrix)
- |誤差矩陣|預測正值|預測負值|
|---|---|---|
|真實正值|TP|FN|
|真實負值|FP|TN| - True Positive(真正, TP):將正類預測為正類數。
- True Negative(真負 , TN):將負類預測為負類數。
- False Positive(假正, FP):將負類預測為正類數。--> 誤報(Type I error):假的正樣本(實際是負樣本)。
- False Negative(假負 , FN):將正類預測為負類數。--> 漏報(Type II error):假的負樣本(實際是正樣本)。
3.2 准確率(Accuracy)
- 准確率是指分類正確的樣本占總樣本個數的比例。
-
\[ACC = \frac{TP+TN}{TP+TN+FP+FN} \]
- 准確率是分類問題中最簡單也是最直觀的評價指標,但存在明顯的缺陷。比如,當負樣本占99%時,分類器把所有樣本都預測為負樣本也可以獲得99%的准確率。所以,當不同類別的樣本占比十分不平衡時,占比較大的樣本對准確率影響較大。
3.3 精確率(Precision)
- 精確率是指分類正確的正樣本個數占分類器判定為正樣本的樣本個數的比例,又叫查准率。
-
\[P = \frac{TP}{TP+FP} \]
- TP+FP代表無論真與假,報出來數據都是正樣本。
3.4 召回率(Recall)
- 召回率是指分類正確的正樣本個數占真正的正樣本個數的比例,又叫查全率。
-
\[R = \frac{TP}{TP+FN} \]
3.5 precision與recall小例子
- 金融詐騙分類中,正樣本P代表是金融詐騙;負樣本N代表不是金融詐騙。假設正樣本P有100個,負樣本N有100個。取threshold=0.5得TP=80,FP=20,問precision和recall分別是多少?如果取threshold=0.9,precision和recall將有什么變化?
- \(Precision = TP/(TP+FP)=0.8\);也可算誤報率0.2,1-0.2 =0.8;
- \(Recall = TP/(TP+FN) = 0.8\);也可計算漏報率0.2,1-0.2=0.8;
- 若threshold=0.9,則TP減小,TP+FP減小,precision不確定;極端情況下FP為0,precision會上升。TP+FN不變,因此recall會減小。
- 通過上面的例子我們發現:實際上precision和recall沒什么關系。
3.6 P-R(Precision-Recall)曲線
- 這里簡單介紹一下P-R曲線的繪制方法。P-R曲線的橫軸是召回率,縱軸是精確率。對於一個排序模型來說,其P-R曲線上的一個點代表着,在某一閾值下,模型將大於該閾值的結果判定為正樣本,小於該閾值的結果判定為負樣本,此時返回結果對應的召回率和精確率。
- PR曲線越靠近右上越好。
3.7 F1 score
- F1 score和ROC曲線也能綜合地反映一個排序模型的性能。
- 是精准率和召回率的調和平均值,它定義為\(F1=\frac{2 \times Precision \times Recall}{Precision + Recall}\)。
-
\[\frac{2}{F_1} = \frac{1}{P} + \frac{1}{R} \]
-
\[F_1 = \frac{2TP}{2TP+FP+FN} \]
3.8 ROC曲線
- ROC曲線的縱坐標為真陽性率(True Positive Rate,TPR);橫坐標為假陽性率(False Positive Rate,FPR)。TPR和FPR的計算方法分別為:
\[TPR = \frac{TP}{TP+FN} \]
\[FPR = \frac{FP}{FP+TN} \]
上式中,P是真實的正樣本的數量,N是真實的負樣本的數量,TP是P個正樣本中被分類器預測為正樣本的個數,FP是N個負樣本中被分類器預測為正樣本的個數。
- 實際上,TPR就是召回率,FPR是負樣本角度的召回率,即誤召率。
- AUC指的是ROC曲線下的面積大小,該值能夠量化地反映基於ROC曲線衡量出的模型性能。計算AUC值只需要沿着ROC橫軸做積分就可以了。由於ROC曲線一般都處於y=x這條直線的上方(如果不是的話,只要把模型預測的概率反轉成1−p就可以得到一個更好的分類器),所以AUC的取值一般在0.5~1之間。AUC越大,說明分類器越可能把真正的正樣本排在前面,分類性能越好。
- ROC曲線越靠近左上越好。
3.9 Roc曲線與P-R曲線有何不同?
- 相比P-R曲線,ROC曲線有一個特點,當正負樣本的分布發生變化時,ROC曲線的形狀能夠基本保持不變(穩定),而P-R曲線的形狀一般會發生較劇烈的變化(敏感)。
- 選擇P-R曲線還是ROC曲線是因實際問題而異的,如果研究者希望更多地看到模型在特定數據集上的表現,P-R曲線則能夠更直觀地反映其性能。
3.10 分類模型評估指標小結
| 指標 | 描述 | Scikit-learn函數 |
|---|---|---|
| Confusion Matrix | 混淆矩陣 | from sklearn.metrics import confusion_matrix |
| Precision | 精確率 | from sklearn.metrics import precision_score |
| Recall | 召回率 | from sklearn.metrics import recall_score |
| F1 | F1值 | from sklearn.metrics import f1_score |
| ROC | ROC曲線 | from sklearn.metrics import roc |
| AUC | ROC曲線下的面積 | from sklearn.metrics import auc |
4 回歸模型的評估指標
4.1 均方誤差(MSE)
- 公式:\(\frac{1}{m} \sum_{i=1}^{m}(\hat{y_i} - y_i)^2\)
- 真實值-預測值,平方和求平均。
- 這不就是線性回歸的損失函數嘛!對,在線性回歸的時候我們的目的就是讓這個損失函數最小。那么模型做出來了,我們把損失函數丟到測試集上去看看損失值不就好了嘛。簡單直觀暴力!
- 最常用的回歸模型的評估指標。
4.2 均方根誤差(RMSE)
- 公式:\(\sqrt{\frac{1}{m} \sum_{i=1}^{m}(\hat{y_i} - y_i)^2}\)
- MSE開個根號。數據太大可以開根號。
- RMSE能夠很好地反映回歸模型預測值與真實值的偏離程度。但在實際問題中,如果存在個別偏離程度非常大的離群點(Outlier)時,即使離群點數量非常少,也會讓RMSE指標變得很差。
- 模型在95%的時間區間內的預測誤差都小於1%,取得了相當不錯的預測結果。那么,造成RMSE指標居高不下的最可能的原因是什么?--離群點。
解決辦法?可以從三個角度來思考。- 第一,如果我們認定這些離群點是“噪聲點”的話,就需要在數據預處理的階段把這些噪聲點過濾掉。
- 第二,如果不認為這些離群點是“噪聲點”的話,就需要進一步提高模型的預測能力,將離群點產生的機制建模進去(這是一個宏大的話題,這里就不展開討論了)。
- 第三,可以找一個更合適的指標來評估該模型。關於評估指標,其實是存在比RMSE的魯棒性更好的指標,比如平均絕對百分比誤差(Mean Absolute Percent Error,MAPE),它定義為\(MAPE = \sum_{i=1}^{n}|\frac{y_i - \bar{y_i}}{y_i}| \times \frac{100}{n}\).MAPE相當於把每個點的誤差進行了歸一化,降低了個別離群點帶來的絕對誤差的影響。
4.3 平均絕對誤差(MAE)
- Mean Absolute Error ,是絕對誤差的平均值,能更好地反映預測值誤差的實際情況.
- \(\frac{1}{m} \sum_{i=1}^{m}|\hat{y_i} - y_i|\)
4.4 可決系數(R-Squared)
- \(R^2 = 1 - \frac{\sum_{i=1}(\hat{y_i}-y_i)^2}{\sum_{i=1}(\bar{y_i}-y_i)^2}\)
- 其中,\(\hat{y_i}\)是預測值,\(\bar{y_i}\)是預測值的平均值。\(R^2<=1\)且越大越好。
4.5 回歸模型的評估指標小結
| 指標 | 描述 | Scikit-learn函數 |
|---|---|---|
| Mean Square Error (MSE, RMSE) | 平均方差 | from sklearn.metrics import mean_squared_error |
| Absolute Error (MAE, RAE) | 絕對誤差 | from sklearn.metrics import mean_absolute_error, median_absolute_error |
| R-Squared | R平方值 | from sklearn.metrics import r2_score |
