評(píng)估結(jié)果用于反應(yīng)模型的好壞,必須設(shè)計(jì)合適的評(píng)估指標(biāo)來(lái)測(cè)量該模型的好壞。模型的好壞是相對(duì)的,使用不同的評(píng)估指標(biāo)對(duì)模型的判定會(huì)得到不一樣的結(jié)果。
評(píng)估指標(biāo)根據(jù)任務(wù)類型可以分為:分類指標(biāo)、回歸指標(biāo)、聚類指標(biāo)和排序指標(biāo)等,本文主要關(guān)注分類指標(biāo)。
分類的評(píng)價(jià)指標(biāo)一般是分類準(zhǔn)確率(accuracy):對(duì)于給定的數(shù)據(jù)集,分類正確的樣本數(shù)與總的樣本數(shù)之比。準(zhǔn)確率在二分類與多分類都能應(yīng)用。
對(duì)于二分類常用的指標(biāo)為精確率(precision)與召回率(recall)。

根據(jù)上圖的混淆矩陣可以得出精確率與召回率的定義:
TP—將正類預(yù)測(cè)為正類的樣本數(shù);
FN—將正類預(yù)測(cè)為負(fù)類的樣本數(shù);
FP—將負(fù)類預(yù)測(cè)為正類的樣本數(shù);
TN—將負(fù)類預(yù)測(cè)為負(fù)類的樣本數(shù);
精確率定義為:
召回率定義為:
精確率可以理解為在所有預(yù)測(cè)為正類這個(gè)事件的準(zhǔn)確率有多高,召回率可以理解為真正的正類有多少被挑選了出來(lái)。理想情況下,精確率和召回率都是越高越好,但是事實(shí)一般相反,精確率高的時(shí)候,召回率低;召回率高的時(shí)候,精確率低。因此需要結(jié)合實(shí)際業(yè)務(wù)看更關(guān)注哪一個(gè)指標(biāo)來(lái)判定模型好壞,為了達(dá)到更好效果,設(shè)計(jì)了一些綜合考慮精確率與召回率的指標(biāo),如$F_1$值,$F_1$值是精確率和召回率的調(diào)和平均值:
精確率和召回率都高時(shí),值也會(huì)高。
ROC與AUC
[ROC曲線]作為常用的二分類評(píng)價(jià)指標(biāo),其全稱為接收者操作特征曲線(Receiver Operating Characteristic)。該曲線縱坐標(biāo)真正率(TPR),橫坐標(biāo)為假正率(FPR),其定義如下:
則ROC曲線位于橫縱坐標(biāo)閾值都為0-1之間,因此首先考慮4個(gè)特殊點(diǎn)(0,0)、(1, 1)、(0, 1)、(1, 0)。(0, 0)點(diǎn)表示TPR=FPR=0,即TP=FP=0,表示該分類器將所有樣本都分為負(fù)類。同理,(1, 1)表示分類器將所有樣本都分類為正類。(0, 1)點(diǎn)表示:FPR=0,TPR=1;意味著FP=0,FN=0,這樣就是一個(gè)完美的分類器,正負(fù)類都分類完全正確。(1, 0)點(diǎn)表示TP=0, TN=0,這就是最糟糕的一個(gè)分類器,完美錯(cuò)過(guò)所有正確答案。綜上,ROC曲線上的點(diǎn)越靠近左上方,那么該分類器就越好。

每一對(duì)TPR與FPR值可以描繪出一個(gè)點(diǎn),為了得到一條ROC曲線,需要調(diào)整不同的預(yù)測(cè)概率,來(lái)得到不同TPR于FPR值對(duì),這樣就可以得到一條ROC曲線。AUC(Area under the Curve of ROC)即ROC曲線下的面積,取值越大說(shuō)明正確率越高。
sklearn包關(guān)于分類指標(biāo)的API
sklearn.metrics模塊實(shí)現(xiàn)了一些loss, score以及一些工具函數(shù)來(lái)計(jì)算分類性能。
一些二分類(binary classification)使用的case:
- matthews_corrcoef(y_true, y_pred):Matthews相關(guān)系數(shù),用于度量二分類的質(zhì)量
- precision_recall_curve(y_true, probas_pred):P-R曲線
- roc_curve(y_true, y_score[, pos_label, …]):ROC曲線
一些多分類(multiclass)使用的case: - confusion_matrix(y_true, y_pred[, labels]):混淆矩陣
- hinge_loss(y_true, pred_decision[, labels, …])
一些多標(biāo)簽(multilabel)的case: - accuracy_score(y_true, y_pred[, normalize, …]):準(zhǔn)確率
- classification_report(y_true, y_pred[, …]):分類報(bào)告,包含精確率、召回率等。
- f1_score(y_true, y_pred[, labels, …]):
值
- fbeta_score(y_true, y_pred, beta[, labels, …])
- hamming_loss(y_true, y_pred[, classes])
- jaccard_similarity_score(y_true, y_pred[, …])
- log_loss(y_true, y_pred[, eps, normalize, …]):logistic回歸loss,或者交叉熵loss(cross-entropy loss),用于概率估計(jì)。
- precision_recall_fscore_support(y_true, y_pred)
- precision_score(y_true, y_pred[, labels, …])
- recall_score(y_true, y_pred[, labels, …])
- zero_one_loss(y_true, y_pred[, normalize, …])
還有一些可以同時(shí)用于二標(biāo)簽和多標(biāo)簽(不是多分類)問題: - average_precision_score(y_true, y_score[, …])
- roc_auc_score(y_true, y_score[, average, …])