zoukankan      html  css  js  c++  java
  • 【Precision Recall F1】sklearn.metrics中的评估方法

    学习笔记

    学习笔记

    classification_report

    sklearn.metrics.classification_report(y_true, y_pred, labels = None, 
                                          target_names = None, sample_weight = None, digits=2)
    
    • 显示主要的分类指标

    • 返回每个类标签的精确、召回率及F1值

    主要参数说明:

    • labels:分类报告中显示的类标签的索引列表

    • target_names:显示与labels对应的名称

    • digits:指定输出格式的精度

    评价指标:

    • (Precision = frac{TP}{TP+FP})

    • (Recall = frac{TP}{TF + FN})

    • (F1 = frac{2 * Precision * Recall}{Precision + Recall})

    • 多分类用宏平均(Macro Average):

      • (P_{macro} = frac{1}{C}sum_{c=1}^{C}{P_c})

      • (R_{macro} = frac{1}{C}sum_{c=1}^{C}{R_c})

      • (F1_{macro} = frac{2 imes P_{macro} imes R_{macro}}{P_{macro} + R_{macro}})

    from sklearn.metrics import classification_report
    
    y_true = [1, 2, 3, 3, 3]
    y_pred = [1, 1, 3, 3, 2]
    labels = [1, 2, 3]
    target_names = ['labels_1','labels_2', 'labels_3']
    
    print(classification_report(y_true, y_pred, labels=labels, target_names=target_names, digits=3))
    
                  precision    recall  f1-score   support
    
        labels_1      0.500     1.000     0.667         1
        labels_2      0.000     0.000     0.000         1
        labels_3      1.000     0.667     0.800         3
    
        accuracy                          0.600         5
       macro avg      0.500     0.556     0.489         5
    weighted avg      0.700     0.600     0.613         5
    

    最后一行结果:等于各指标的加权平均值(常用于多分类)

    注意:在二分类中,真正例率也称灵敏度,真负例率也称特效性

    accuracy_score

    • 分类准确率分数是指所有分类正确的百分比
    sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
    
    • normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数

    recall_score

    sklearn.metrics.recall_score(y_true, y_pred, labels=None, 
                                 pos_label=1, average='binary', sample_weight=None)
    
    • 将一个二分类matrics拓展到多分类或多标签问题时,我们可以将数据看成多个二分类问题的集合,每个类都是一个二分类。

    • 接着,我们可以通过跨多个分类计算每个二分类metrics得分的均值,这在一些情况下很有用。你可以使用average参数来指定。

    • macro:计算二分类metrics的均值,为每个类给出相同权重的分值。当小类很重要时会出问题,因为该macro-averging方法是对性能的平均。

      • 另一方面,该方法假设所有分类都是一样重要的,因此macro-averaging方法会对小类的性能影响很大。
    • weighted: 对于不均衡数量的类来说,计算二分类metrics的平均,通过在每个类的score上进行加权实现。

    • micro:给出了每个样本类以及它对整个metrics的贡献的pair(sample-weight),而非对整个类的metrics求和,它会每个类的metrics上的权重及因子进行求和,来计算整个份额。

      • Micro-averaging方法在多标签(multilabel)问题中设置,包含多分类,此时,大类将被忽略。
    • samples:应用在multilabel问题上。它不会计算每个类,相反,它会在评估数据中,通过计算真实类和预测类的差异的metrics,来求平均(sample_weight-weighted)

    • average:average=None将返回一个数组,它包含了每个类的得分.

    参数average

    选项 含义
    binary 二分类
    micro 统计全局TP和FP来计算
    macro 计算每个标签的未加权均值(不考虑不平衡)
    weighted 计算每个标签等等加权均值(考虑不平衡)
    samples 计算每个实例找出其均值

    precision_score

    sklearn.metrics.precision_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
    

    f1_score

    sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
    

    参数:

    • y_true : 1d array-like, or label indicator array / sparse matrix.

      • 目标的真实类别。
    • y_pred : 1d array-like, or label indicator array / sparse matrix.

      • 分类器预测得到的类别。
    • average : string,[None, ‘binary’(default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]

      • 这里需要注意,如果是二分类问题则选择参数‘binary’;如果考虑类别的不平衡性,需要计算类别的加权平均,则使用‘weighted’;如果不考虑类别的不平衡性,计算宏平均,则使用‘macro’。
    
    from sklearn.metrics import f1_score
     
    y_pred = [0, 1, 1, 1, 2, 2]
    y_true = [0, 1, 0, 2, 1, 1]
     
    print(f1_score(y_true, y_pred, average='macro'))  
    print(f1_score(y_true, y_pred, average='weighted'))  
    
    # 0.3333333333333333
    # 0.38888888888888884
    
  • 相关阅读:
    javascript 自定义事件
    javascript 实现HashTable(哈希表)
    NHibernate输出SQL语句
    Asp.net MVC Comet推送
    MySQL 数据备份与还原
    Mysql -- 慢查询
    cookie 的HttpOnly 和 Secure 属性
    Ubuntu -- 反射shell nc
    docker 访问宿主机网络
    k8s 配置文件 详解
  • 原文地址:https://www.cnblogs.com/douzujun/p/13860679.html
Copyright © 2011-2022 走看看