sklearn之模型评估指标总结归纳

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzw2016/article/details/83623531

机器学习模型评估

以下方法,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()

网格搜索中应用

下次写吧。。。

猜你喜欢

转载自blog.csdn.net/lzw2016/article/details/83623531