1. 程式人生 > >sklearn之模型評估指標總結歸納

sklearn之模型評估指標總結歸納

文章目錄

機器學習模型評估

以下方法,sklearn中都在sklearn.metrics類下,務必記住哪些指標適合分類,那些適合迴歸,不能混著用
分類的模型大多是Classifier結尾,迴歸是Regression

分類模型

  • accuracy_score(準確率得分)是模型分類正確的資料除以樣本總數 【模型的score方法算的也是準確率】
accuracy_score(y_test,y_pre)
# 或者 model.score(x_test,y_test),大多模型都是有score方法的
  • classification_report中的各項得分的avg/total 是每一分類佔總數的比例加權算出來的
print(classification_report(y_test,y_log_pre))

             precision    recall  f1-score   support

          0       0.87      0.94      0.90       105
          1       0.91      0.79      0.85        73

avg / total       0.88      0.88      0.88       178
  • confusion_matrix(混淆矩陣),用來評估分類的準確性

有的分類問題,實際樣本中1000個A,10個B,如果最後分類大多數B都被預測錯誤了,但依據其他評估方法,得分反而很高(因為A的數目相對太多導致的)

>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])
  • precision_score(精確度)、recall_score(召回率)、f1_score(後者由前兩個推匯出的)

這三個不僅適合二分類,也適合多分類。只需要指出引數average=‘micro’/‘macro’/'weighted’

  • macro:計算二分類metrics的均值,為每個類給出相同權重的分值。當小類很重要時會出問題,因為該macro-averging方法是對效能的平均。另一方面,該方法假設所有分類都是一樣重要的,因此macro-averaging方法會對小類的效能影響很大
  • micro: 給出了每個樣本類以及它對整個metrics的貢獻的pair(sample-weight),而非對整個類的metrics求和,它會每個類的metrics上的權重及因子進行求和,來計算整個份額。Micro-averaging方法在多標籤(multilabel)問題中設定,包含多分類,此時,大類將被忽略
  • weighted: 對於不均衡數量的類來說,計算二分類metrics的平均,通過在每個類的score上進行加權實現

迴歸模型

常見的損失MAE、MSE、R^2

  • mean_absolute_error(MAE、平均絕對誤差)
  • mean_squared_error(MSE、均方誤差)
>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
>>> y_pred = [[0, 2], [-1, 2], [8, -5]]
>>> mean_squared_error(y_true, y_pred)  
0.7083
  • r2_score(R^2、可決係數)
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> r2_score(y_true, y_pred)  
0.948

聚類模型

這一塊沒有過多涉及,建議看文件聚類效能度量

交叉驗證中指定scoring引數

  • 交叉驗證cross_val_score的scoring引數
    • 分類:accuracy(準確率)、f1、f1_micro、f1_macro(這兩個用於多分類的f1_score)、precision(精確度)、recall(召回率)、roc_auc
    • 迴歸:neg_mean_squared_error(MSE、均方誤差)、r2
    • 聚類:adjusted_rand_score、completeness_score等 【這一塊我沒怎麼用過】
from sklearn.model_selection import cross_val_score

scores = cross_val_score(dtc,X,Y,cv=5,scoring='f1')
scores.mean()

網格搜尋中應用

下次寫吧。。。