zoukankan      html  css  js  c++  java
  • 【笔记】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的实现以及概念

  • 相关阅读:
    搜狗搜索用户体验
    第六周学习进度条
    对我们团队NBPL的改进方案意见
    钱多多软件制作第七天
    团队冲刺第二周05
    团队冲刺第二周04
    团队冲刺第二周03
    输入法评价
    团队冲刺第二周02
    团队冲刺第二周01
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14325221.html
Copyright © 2011-2022 走看看