分類模型評估:
指標 | 描述 | Scikit-learn函數 |
Precision | AUC | from sklearn.metrics import precision_score |
Recall | 召回率 | from sklearn.metrics import recall_score |
F1 | F1值 | from sklearn.metrics import f1_score |
Confusion Matrix | 混淆矩陣 | from sklearn.metrics import confusion_matrix |
ROC | ROC曲線 | from sklearn.metrics import confusion_matrix |
AUC | ROC曲線下的面積 | from sklearn.metrics import auc |
回歸模型評估:
指標 | 描述 | 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 |
混淆矩陣
對於一個二分類的模型,其模型的混淆矩陣是一個2×2的矩陣。如下圖所示:
Predicted condition | Predicted condition | ||
positive | negative | ||
True condition | positive | True Positive | False Negative |
False condition | negative | False Positive | True Negative |
混淆矩陣比模型的精度的評價指標更能夠詳細地反映出模型的”好壞”。模型的精度指標,在正負樣本數量不均衡的情況下,會出現容易誤導的結果
- True Positive:真正(TP),樣本是正的正樣本,預測也是正的正樣本。
- False Negative:假負(FN),樣本是正的正樣本,預測為負的正樣本。
- False Positive:假正(FP),樣本是正的負樣本,預測為正的負樣本。
- True Negative:真負類(TN),樣本是正的負樣本,預測為負的負樣本。
Accuracy(准確率):
正確預測的正反例數 / 樣本的總數。
准確率是預測正確的結果占總樣本的百分比,但很多項目場景不適用!最主要原因是樣本不平衡。舉個簡單例子,一個總樣本中,正樣本占90%,負樣本占10%,樣本嚴重不平衡。這時候如果將全部正樣本預測為正樣本,即可達到90%的准確率。所以樣本不均衡,准確率會失效。
Precision(精確率):Percision = TP/(TP+FP)
正確預測的正例數 / 預測正例總數。可理解為查准率。在預測為正的記錄中,有多少實際為正。
召回率:Recall = TP / (TP+FN)
正確預測的正例數 / 實際正例總數。可理解為查全率。在實際為正的記錄中,有多少預測為正。
Recall越高,說明有更多的正類樣本被模型預測正確,模型的效果越好。
F1 score:2/F1 = 1/Precision + 1/Recall
精確率和召回率的調和值。由於Precision和Recall是一對不可調和的矛盾,很難同時提高二者(不一定吧),故提出F1來試圖綜合二者,F1是P和R的調和平均。F1更接近於兩個數較小的那個,所以精確率和召回率接近時值最大。很多推薦系統會用的評測指標。
對ROC曲線、AUC的理解
True Positive Rate(真陽率)、False Positive(偽陽率):
(recall)
TPRate的意義是所有真實類別為1的樣本中,預測類別為1的比例;FPRate的意義是所有真實類別為0的樣本中,預測類別為1的比例。
按照定義,AUC即ROC曲線下的面積,而ROC曲線的橫軸是FPRate,縱軸是TPRate,當二者相等時,即y=x,如下圖:
表示的意義是:對於不論真實類別是1還是0的樣本,分類器預測為1的概率是相等的。
我們希望分類器達到的效果是:對於真實類別為1的樣本,分類器預測為1的概率(即TPRate),要大於真實類別為0而預測類別為1的概率(即FPRate),即y>x,因此大部分的ROC曲線長成下面這個樣子:

最理想的情況下,既沒有真實類別為1而錯分為0的樣本——TPRate一直為1,也沒有真實類別為0而錯分為1的樣本——FP rate一直為0,AUC為1,這便是AUC的極大值
如何得到roc曲線:
假設采用邏輯回歸分類器,其給出針對每個實例為正類的概率,那么通過設定一個閾值如0.6,概率大於等於0.6的為正類,小於0.6的為負類。對應的就可以算出一組(FPR,TPR),在平面中得到對應坐標點。隨着閾值的逐漸減小,越來越多的實例被划分為正類,但是這些正類中同樣也摻雜着真正的負實例,即TPR和FPR會同時增大。閾值最大時,對應坐標點為(0,0),閾值最小時,對應坐標點(1,1)。


- 面積計算:矩形面積累加,計算復雜,基本不用。
- 統計正負樣本對PK情況:統計一下所有的 M×N(M為正類樣本的數目,N為負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。然后除以MN。實現這個方法的復雜度為O(n^2)。實際也不會用。
-
rank求取:

降序rank--> 去掉(正,正)樣本對數--> 求取比例
- 按概率從高到矮排個降序, 對於正樣本中score最高的,排序為rank_n, 比它概率小的有M-1個正樣本(M為正樣本個數), (rank_n- M) 個負樣本。
- 正樣本概率第二高的, 排序為rank_n-1, 比它概率小的有M-2個正樣本,(rank_n-1 - M + 1) 個 負樣本。
- 以此類推正樣本中概率最小的, 排序為rank_1,比它概率小的有0個正樣本,rank_1 - 1 個負樣本。
- 總共有MxN個正負樣本對(N為負樣本個數)。把所有比較中 正樣本概率大於負樣本概率 的例子都算上, 得到公式 (rank_n - M + rank_n-1 - M + 1 .... + rank_1 - 1) / (MxN) 就是正樣本概率大於負樣本概率的可能性了。 化簡后(因為后面是個等差數列)得:

其實就是,按正樣本score降序排列情況下,負樣本pk失敗的數目總數占所有樣本對的比例。
AUC對正負樣本比例不敏感的原因:
橫軸FPR只關注負樣本,與正樣本無關;縱軸TPR只關注正樣本,與負樣本無關。所以橫縱軸都不受正負樣本比例影響,積分(求和)當然也不受其影響。
隨機挑選一個正樣本和一個負樣本,分類器將正樣本排在前面的概率。
參考:
https://www.cnblogs.com/keye/p/9367347.html
https://www.zhihu.com/question/39840928
https://www.jianshu.com/p/5e12cd6c3ed1