【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}{TP + 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 \times P_{macro} \times 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
posted @ 2020-10-22 20:03  douzujun  阅读(711)  评论(0编辑  收藏  举报