機器學習模型評估
以下方法,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上進行加權實現
- roc_curve(ROC曲線,用於二分類)點擊查看
回歸模型
常見的損失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()
網格搜索中應用
下次寫吧。。。