zoukankan      html  css  js  c++  java
  • 基于sklearn的metrics库的常用有监督模型评估指标学习

    一、分类评估指标

    1. 准确率(最直白的指标)
      缺点:受采样影响极大,比如100个样本中有99个为正例,所以即使模型很无脑地预测全部样本为正例,依然有99%的正确率
      适用范围:二分类(准确率);二分类、多分类(平均准确率)
      from sklearn.metrics import accuracy_score
      y_pred = [0, 2, 1, 3]
      y_true = [0, 1, 2, 3]
      accuracy_score(y_true, y_pred)
      0.5
      accuracy_score(y_true, y_pred, normalize=False)
      2
      from sklearn.metrics import balanced_accuracy_score
      y_true = [0, 1, 0, 0, 1, 0]
      y_pred = [0, 1, 0, 0, 0, 1]
      balanced_accuracy_score(y_true, y_pred)
      0.625
    2. 混淆矩阵
      适用范围:所有分类模型,包括二分类、多分类
      介绍:实质是一张交叉表,纵轴为真实值,横轴为预测值
      API介绍:

      Example1:多分类任务,类别已经转换为整数类型,分别为0,1,2三个类别
      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]])

      可以推导出混淆矩阵如下所示


      Example2:多分类任务,类别没有转换为整型数值,而是作为字符串直接传入

      from sklearn.metrics import confusion_matrix
      y_true
      = ["cat", "ant", "cat", "cat", "ant", "bird"] y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"] confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"]) array([[2, 0, 0], [0, 0, 1], [1, 0, 2]])

      证明该API可以直接传入类别型字符串,混淆矩阵如下所示


      Example3:二分类任务

      from sklearn.metrics import confusion_matrix
      
      confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0])
      array([[0, 2],
             [1, 1]], dtype=int64)
      
      tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0]).ravel()
      (tn, fp, fn, tp)
      (0, 2, 1, 1)


      此处“1”为正例,“0”为反例


    3.  Roc曲线及auc值
      适用范围:二分类
      介绍:roc曲线为二维平面的一条曲线,横坐标为fpr,纵坐标为tpr,auc(area under the curve)顾名思义,即为曲线与横轴围成的曲线下的面积
      API:
      sklearn中有三个关于roc计算相关的接口,分别为

      1 metrics.roc_auc_score()
      2 metrics.roc_curve()
      3 metrics.auc()

      1)直接计算auc的值

      from sklearn import metrics
      import numpy as np
      y_true
      = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) metrics.roc_auc_score(y_true, y_scores) 0.75

      2)先计算fpr,tpr以及threshold(阈值),再通过fpr和tpr求auc

      from sklearn import metrics
      import numpy as np
      
      y_true = np.array([0, 0, 1, 1])
      y_scores = np.array([0.1, 0.4, 0.35, 0.8])
      fpr, tpr, threshold = metrics.roc_curve(y_true, y_scores)
      (fpr, tpr, threshold)
      (array([0. , 0.5, 0.5, 1. ]),
       array([0.5, 0.5, 1. , 1. ]),
       array([0.8 , 0.4 , 0.35, 0.1 ]))
      metrics.auc(fpr, tpr)
      0.75

      注意接口接收的参数为类别的真实标签以及模型输出的概率(得分)值,而非模型预测的标签(标签需要通过概率+阈值来得到)

    4. PR曲线及F1-score
      PR曲线为二维平面曲线,横轴为Recall(召回率),纵轴为Precision(精确率),F1-score为recall和precision的调和平均数
      适用范围:二分类
      API:
      sklearn中有五个常用的与PR相关的接口
      1 metrics.precision_recall_curve()
      2 metrics.precision_recall_fscore_support()
      3 metrics.precision_score()
      4 metrics.recall_score()
      5 metrics.fbeta_score()

      1)计算pr曲线
      接口接收两个参数,其一为样本的真实值,另一个为样本的预测概率(得分),示例如下:

      import numpy as np
      from sklearn.metrics import precision_recall_curve
      
      y_true = np.array([0, 0, 1, 1])
      y_scores = np.array([0.1, 0.4, 0.35, 0.8])
      precision, recall, thresholds = precision_recall_curve(y_true, y_scores)
      precision, recall, thresholds
      (array([0.66666667, 0.5       , 1.        , 1.        ]),
       array([1. , 0.5, 0.5, 0. ]),
       array([0.35, 0.4 , 0.8 ]))

      2)计算当预测值已经通过阈值转化为类别后的具体某一阈值下的PR及F-score值

      from sklearn import metrics
      
      #该函数可直接求出precision、recall和f-score
      precision,recall,fbeta_score,support = metrics.precision_recall_fscore_support()
      #以下三个函数可分别求出precision、recall和f-score 
      precision = metrics.precision_score() 
      recall = metrics.recall_score() 
      f-score = metrics.fbeta_score()
    5. ks曲线及ks值
      适用范围:二分类
      ks曲线的横坐标为阈值的分位数,纵坐标分别为tpr,fpr,ks值(tpr-fpr),所以可用2中与ROC相关的接口计算得出

    6. kappa系数、汉明损失、铰链损失、杰卡德相关系数
      适用范围:多分类
      1 metrics.cohen_kappa_score()
      2 metrics.hamming_loss()
      3 metrics.hinge_loss()
      4 metrics.jaccard_score()
      5 metrics.log_loss()
    7. 马修斯相关系数(MCC)
      适用范围:二分类
      from sklearn.metrics import matthews_corrcoef
      
      y_true = [+1, +1, +1, -1]
      y_pred = [+1, -1, +1, +1]
      matthews_corrcoef(y_true, y_pred)
      -0.33333333

    二、回归评估指标

    1. R2
    2. MSE
    3. MAE
      睡了。。。明天再修改
  • 相关阅读:
    [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)
    [Canvas]计时表/秒表
    [Canvas]新版箴言钟表
    [Canvas]用透明PNG图在背景上画前景能不遮挡背景
    [Canvas]动态背景
    [Canvas]更多的球
    [Canvas]碰撞球 增加小球间碰撞检测
    [Canvas]碰撞球
    [Canvas]越来越近的女孩
    [Canvas]走近的女孩
  • 原文地址:https://www.cnblogs.com/tianyadream/p/12348171.html
Copyright © 2011-2022 走看看