1. 程式人生 > >機器學習-分類模型評估標準

機器學習-分類模型評估標準

          對模型的泛化效能進行評估,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化能力的評價標準,這就是效能度量(performance measure),迴歸任務最常用的效能度量是"均方誤差" (mean squared error)。下面主要介紹分類模型的評估以及在sklearn庫中的實現方法。

 一、錯誤率與精度(accuracy)

         錯誤率和精度是分類任務中最常用的兩種效能度量,既適用於二分類任務,也適用於多分類任務。錯誤率是分類錯誤的樣本數佔樣本總數的比例,精度則是分類正確的樣本數佔樣本總數的比例。

from sklearn import metrics 
print('模型精度:',metrics.accuracy_score(y_test,y_predict))

二、查準率(precision)、查全率(recall)與F1-score

       錯誤率和精度雖常用,但並不能滿足所有任務需求。以西瓜問題為例,假定瓜農拉來一車西瓜,我們用訓練好的模型對這些西瓜進行判別,顯然,錯誤率衡量了有多少比例的瓜被判別錯誤。但是若我們關心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比列被挑了出來”,顯然錯誤率就不能用了,需要使用其他的效能度量。查準率(precision)和查全率(recall)是更為適用於此類需求的效能度量。

       對於二分類問題,可將樣例根據其真實類別與學習器預測類別的組合劃分為真正例(true positive) 、假正例(false positive) 、真反例(true negative) 、假反例(false negative) 四種情形,令TP 、FP 、TN 、FN 分別表示其對應的樣例數,則顯然有TP+FP+TN+FN=樣例總數.

TP: 如果一個例項是正類並且也被預測成正類,即為真正類(True Positive)
FP: 如果一個例項是負類而被預測成正類,即為假正類(False Positive)
TN: 如果一個例項是負類並且也被預測成負類,即為真負類(True Negative)
 FN: 如果一個例項是正類而被預測成負類,即為假負類(False Negative)

分類結果的"混淆矩陣" (confusion matrix) 如下表所示:

                                                    

查準率 P與查全率 R 分別定義為

                                                                       

       查準率和查全率是一對矛盾的度量.一般來說,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。

       F1-score,是統計學中用來衡量二分類模型精確度的一種指標。它同時兼顧了分類模型的準確率和召回率。F1分數可以看作是模型準確率和召回率的一種加權平均,它的最大值是1,最小值是0。 

       隨著閾值的變化,就像假設檢驗的兩類錯誤一樣,如下圖所示召回率和精確率不能同時提高,因此我們就需要一個指標來調和這兩個指標,於是人們就常用F1-score來進行表示:

                                                                           

print('查準率:',metrics.precision(y_test,y_predict))
print('查全率:',metrics.recall_score(y_test,y_predict))
print('F1-score:',metrics.precision_score(y_test,y_predict))

三、ROC曲線、AUC

              ROC(Receiver Operating Characteristic) 受試者工作特徵曲線的縱軸是"真正例率" (True Positive Rate,簡稱TPR) ,也稱靈敏度,橫軸是"假正例率" (False Positive Rate,簡稱FPR) ,也稱1-特異度,兩者分別定義為

                                                                                    

下面給出ROC曲線示意圖:

                                                          

         現實任務中通常是利用有限個測試樣例來繪製ROC 圖,此時僅能獲得有限個(真正例率,假正例率)座標對,無法產生圖 (a) 中的光滑ROC 曲線, 只能繪製出如圖 (b) 所示的近似ROC 曲線。

         AUC的全稱是(Area Under then Curve Of ROC), 十分直白就是ROC曲線下方的面積,AUC的值越大越好,其取值範圍為(0.5,1)。

print('AUC:',metrics.roc_auc_score(y_test,y_pred))

四、log-loss

          很多機器學習的演算法通常會用logloss作為模型評價的指標,對數損失(Log loss)亦被稱為邏輯迴歸損失(Logistic regression loss)或交叉熵損失(Cross-entropy loss),簡單來說就是邏輯迴歸的損失函式。Logloss的公式如下: 

                                                       

             其中y為預測值,N為樣本數,p為預測概率。         

y_pred=LR.(predict_proba(X))[:,1]預測類別為1的概率
​print('log-loss:',metrics.log_loss(y_test,y_pred))