accuracy_score、recall_score、precision_score、roc_auc_score参数理解 学习器性能评价函数

  了解一个函数首先看这个函数的功能,也就是这个函数的参数有哪些,这个函数的返回值是哪些。其次和这个函数类似的函数之间的对比,什么情况下用什么、用哪个会更好(减少调用的时间,数据的存储决定怎么调用等等)。最后就是列举一些这个函数的例子,确保达到会用的程度。熟悉函数的这些含义是用好它的前提,因此,非常有必要去总结这些函数。
  熟悉这些函数的方法就是看官方文档的注释,理解不透的就是看相关博客啦!

  • accuracy_score()函数
    1、函数功能
    分类正确率分数,函数返回一个分数,这个分数或是正确的比例,或是正确的个数。
    2、函数原型

    accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None):

    3、函数参数解读
     - y_true:正确输出值。y_pred:经过网络的预测值,分类器输出值。
      y_treue和y_pred可以选择的类型一样,包括:一维数组、矩阵。
      - normalize:normalize是布尔类型参数,如果是False的话,函数就返回样本分类的正确数量。如果是True的话,返回分类正确率。默认情况下数True的,也就是返回正确率。
      - sample_weight:样本的权重,默认是None。
    4、官方文档的例子

    > 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
    
    >In the multilabel case with binary label indicators:
    > import numpy as np
    > accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))
    0.5
    """

  • recall_score()函数
    1、函数功能
    计算召回率,就是正例被分为正例的比例。函数返回一个float类型的数字或数组。在二分类任务中,召回率表示被分为正例的个数占所有正例个数的比例;如果是多分类的话,就是每一类的平均召回率。

    2、函数原型

    recall_score(y_true, y_pred, *, labels=None, pos_label=1, average=‘binary’,
    sample_weight=None, zero_division=“warn”):

    3、函数参数解读

     F1-score:    2*(P*R)/(P+R)
     
     精确度P 为 TP/(TP+FP)
     
     召回率R TP/(TP+FN)
    
    • y_truey_pred:正确输出值,y_pred:经过网络的预测值,分类器输出值。
    • pos_label: 这个参数设置为binary并且数据是binary时,返回二分类的分数。如果数据是多分类或者多标签时,返回 labels=[pos_label] 的标签分数。
    • average:计算F1分数,根据average的不同取值,F1的计算方法也不同。对于多类/多标签目标,此参数是必需的。如果为None,则返回每个班级的分数。否则,这将确定对数据执行的平均类型:
      'binary':返回pos_label所表示类的结果。这个仅仅在二分类上有用。
      'micro':通过先计算总体的TP,FN和FP的数量,再计算F1。
      'macro':分布计算每个类别的F1,然后做平均(各类别F1的权重相同)。
      'weighted':计算每个标签的metrics,并找到它们的加权平均值。这个改变‘macro’去解释标签不平衡,这可能导致F分数不在precision和recall之间。
      'samples':计算每个实例的metrics,并找到他们的平均值。
    • samples weight:样本权重。
    • zero_division:参数可选的取值有"warn", 0 or 1, 默认是"warn"。设置出现0除法返回的值。

    4、官方文档的例子

 Examples
    --------
    >>> from sklearn.metrics import recall_score
    >>> y_true = [0, 1, 2, 0, 1, 2]
    >>> y_pred = [0, 2, 1, 0, 0, 1]
    
    # 结果1
    >>> recall_score(y_true, y_pred, average='macro')
    0.33...
    # 结果2 
    >>> recall_score(y_true, y_pred, average='micro')
    0.33...
    # 结果3
    >>> recall_score(y_true, y_pred, average='weighted')
    0.33...
    
    # 结果4
    >>> recall_score(y_true, y_pred, average=None)
    array([1., 0., 0.])
    """

在这里我们可以列一个表格,根据y_true = [0, 1, 2, 0, 1, 2]和y_pred = [0, 2, 1, 0, 0, 1],可以得到下列的混淆矩阵,不懂怎么列的评论。

类0 类1 类2 总计
类 0 2 0 0 2
类1 1 0 1 2
类2 0 2 0 2
总计 3 2 1 6
1)结果2,average=‘micro’,此时F1分数的计算方法是计算总的TP,FN和FP的数量,再计算F1。(当average=‘macro’时,是分别求出每个类的F1分数,之后求均值。可使用相似的列表格方法求出)
类0 类1 类3 总数
TP 2 0 0 2
FP 1 2 1 4
FN 0 2 2 4

精确度P 为 TP/(TP+FP)=2/6=1/3; 召回率R TP/(TP+FN)=2/6=1/3。

F1-score: 2(PR)/(P+R)=1/3

2)结果4中,当average=None时,结果将返回每个类分数,y_true是三分类问题,那么返回的结果数组就是三维的。类0、1、2的实际个数都为2,预测分类中类0、1、2分类正确的个数分别是2、0、0(表格对角线),因此数组展示的结果就是2/2、0/2、0/2,即1、0、0( array([1., 0., 0.]))。

    >>> y_true = [0, 0, 0, 0, 0, 0]
    >>> recall_score(y_true, y_pred, average=None)
    array([0.5, 0. , 0. ])
    # 结果5
    >>> recall_score(y_true, y_pred, average=None, zero_division=1)
    array([0.5, 1. , 1. ])

3)结果5中,zero_division=1,将结果为0的设置为1。

  • precision_score()函数
    1、函数功能
    精确度 =tp / (tp + fp)。
    2、函数原型
def precision_score(y_true, y_pred, *, labels=None, pos_label=1,
                    average='binary', sample_weight=None,
                    zero_division="warn"):

3、函数参数解读
和上述的recall_score()函数的参数类似。
4、官方文档的例子
和上述的recall_score()函数类似。

  • roc_auc_score()函数
    1、函数功能
    计算auc,auc就是曲线roc下面积,这个数值越高,则分类器越优秀。这个曲线roc所在坐标轴的横轴是FPR,纵轴是TPR。TPR = TP/P = TP/(TP+FN)、FPR = FP/N = FP/(FP+TN)。
    2、函数原型
def roc_auc_score(y_true, y_score, *, average="macro", sample_weight=None,
                  max_fpr=None, multi_class="raise", labels=None):

你可能感兴趣的:(深度学习,python,机器学习,人工智能)