• 【笔记】F1 score


    F1 score

    关于精准率和召回率

    精准率和召回率可以很好的评价对于数据极度偏斜的二分类问题的算法,有个问题,毕竟是两个指标,有的时候这两个指标也会产生差异,对于不同的算法,精准率可能高一些,召回率可能低一些,反之一样,真正使用的时候应该根据具体的使用场景来去解读这两个指标

    想要得到这两个指标之间的平衡,希望能同时照顾到精准率和召回率,这样就可以使用新的指标,F1 score

    F1 score的目的就是兼顾这两个指标,描述的是精准率和召回率的调和平均值,公式可以写成

    这种的好处就是,如果说一个值特别低,另外一个值特别高,最终得到的F1 score的值也会很低,只有两个值都很高,得到的值才会非常高

    可以将式子进行化简通分变形,最后可以得到

    具体实现

    (在notebook中)

    首先实现一个F1 score,根据上式即可写出,设置如果分母为0,直接返回0即可

      import numpy as np
    
      def f1_score(precision,recall):
          try:
              return 2*precision*recall / (precision+recall)
          except:
              return 0.0
    

    如果精准率为0.5,召回率为0.5,求出对应的F1 score

      precision = 0.5
      recall = 0.5
      f1_score(precision,recall)
    

    结果如下

    如果精准率为0.1,召回率为0.9,求出对应的F1 score

      precision = 0.1
      recall = 0.9
      f1_score(precision,recall)
    

    结果如下

    如果精准率为0.0,召回率为1.0,求出对应的F1 score

      precision = 0.0
      recall = 1.0
      f1_score(precision,recall)
    

    结果如下

    使用手写识别数据集,相应的设置为极度偏斜的数据情况,然后对数据集进行分割

      from sklearn import datasets
    
      digits = datasets.load_digits()
      X = digits.data
      y = digits.target.copy()
    
      y[digits.target==9] = 1
      y[digits.target!=9] = 0
    
      from sklearn.model_selection import train_test_split
      X_train,X_test,y_train,y_test =  train_test_split(X,y,random_state=666)
    

    使用sklearn中的逻辑回归后,计算准确度

      from sklearn.linear_model import LogisticRegression
    
      log_reg = LogisticRegression()
      log_reg.fit(X_train,y_train)
      log_reg.score(X_test,y_test)
    

    结果如下

    对训练的结果进行预测,使用混淆矩阵得出

      y_predict = log_reg.predict(X_test)
    
      from sklearn.metrics import confusion_matrix
    
      confusion_matrix(y_test,y_predict)
    

    结果如下

    计算准确率

      from sklearn.metrics import precision_score
    
      precision_score(y_test,y_predict)
    

    结果如下

    计算召回率

      from sklearn.metrics import recall_score
    
      recall_score(y_test,y_predict)
    

    结果如下

    使用sklearn中的f1_score计算F1 score,传入真实值和预测值

      from sklearn.metrics import f1_score
    
      f1_score(y_test,y_predict)
    

    结果如下

    以上就是F1 score的实现以及概念

  • 相关阅读:
    2019.6.1 模拟赛——[ 费用流 ][ 数位DP ][ 计算几何 ]
    LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
    AGC033 D~F——[ 值放到角标的DP ][ 思路+DP ][ 思路 ]
    LOJ 2719 「NOI2018」冒泡排序——模型转化
    LOJ 3094 「BJOI2019」删数——角标偏移的线段树
    CF 717A Festival Organization——斯特林数+递推求通项+扩域
    LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域
    洛谷 4723 【模板】线性递推——常系数线性齐次递推
    bzoj 3924 幻想乡战略游戏 —— 动态点分治
    计算几何整理
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14325221.html
Copyright © 2020-2023  润新知