二、性能度量

  1. scikit-learn中有三种方法来评估estimator 的预测性能:

    • estimator.score方法。
    • 通过使用model_selection中的模型评估工具来评估,如model_selection.cross_val_score等方法。
    • 通过scikit-learnmetrics模块中的函数来评估estimator 的预测性能。这里重点讲解这些函数。
  2. metrics模块中的性能评价函数的通用参数:

    • y_true:一个数组,给出了真实的标记集合。
    • y_pred:一个数组,给出了预测的标记集合。
    • sample_weight:一个浮点数,给出了样本权重。默认每个样本的权重为 1。

2.1 分类问题性能度量

2.1.1 accuracy_score

  1. accuracy_score函数用于计算分类结果的准确率,其原型为:

    1. sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

    返回值:如果normalizeTrue,则返回准确率;如果normalizeFalse,则返回正确分类的数量。

    参数:

    • y_true:真实的标记集合。

    • y_pred:预测的标记集合。

    • normalize:一个布尔值,指示是否需要归一化结果。

      • 如果为True,则返回分类正确的比例(准确率)。
      • 如果为False,则返回分类正确的样本数量。
    • sample_weight:样本权重,默认每个样本的权重为 1 。

2.1.2 precision_score

  1. precision_score函数用于计算分类结果的查准率,其原型为:

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

    返回值:查准率。即预测结果为正类的那些样本中,有多少比例确实是正类。

    参数:

    • y_true:真实的标记集合。

    • y_pred:预测的标记集合。

    • labels:一个列表。当average 不是'binary' 时使用。

      • 对于多分类问题,它指示:将计算哪些类别。不在labels 中的类别,计算macro precision 时其成分为 0 。
      • 对于多标签问题,它指示待考察的标签的索引。
      • 除了average=None 之外,labels 的元素的顺序也非常重要。
      • 默认情况下,y_truey_pred 中所有的类别都将被用到。
    • pos_label:一个字符串或者整数,指定哪个标记值属于正类。

      • 如果是多分类或者多标签问题,则该参数被忽略。
      • 如果设置label=[pos_label] 以及average!='binary' 则会仅仅计算该类别的precision
    • average:一个字符串或者None,用于指定二分类或者多类分类的precision 如何计算。

      • 'binary':计算二类分类的precision。 此时由pos_label 指定的类为正类,报告其precision

        它要求y_true、y_pred 的元素都是0,1

      • 'micro':通过全局的正类和父类,计算precision

      • 'macro':计算每个类别的precision,然后返回它们的均值。

      • 'weighted':计算每个类别的precision,然后返回其加权均值,权重为每个类别的样本数。

      • 'samples':计算每个样本的precision,然后返回其均值。

        该方法仅仅对于多标签分类问题有意义。

      • None:计算每个类别的precision,然后以数组的形式返回每个precision

    • sample_weight:样本权重,默认每个样本的权重为 1

2.1.3 recall_score

  1. recall_score函数用于计算分类结果的查全率,其原型为:

    1. sklearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,
    2. average='binary', sample_weight=None)

    返回值:查全率。即真实的正类中,有多少比例被预测为正类。

    参数:参考precision_score

2.1.4 f1_score

  1. f1_score函数用于计算分类结果的 二、性能度量 - 图1 值,其原型为:

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

    返回值:二、性能度量 - 图2 值。即查准率和查全率的调和均值。

    参数:参考precision_score

2.1.5 fbeta_score

  1. fbeta_score函数用于计算分类结果的 二、性能度量 - 图3 值,其原型为:

    1. sklearn.metrics.fbeta_score(y_true, y_pred, beta, labels=None, pos_label=1,
    2. average='binary', sample_weight=None)

    返回值:二、性能度量 - 图4 值。

    参数:

    • beta二、性能度量 - 图5
    • 其它参数参考precision_score

2.1.6 classification_report

  1. classification_report函数以文本方式给出了分类结果的主要预测性能指标。其原型为:

    1. sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None,
    2. sample_weight=None, digits=2)

    返回值:一个格式化的字符串,给出了分类评估报告。

    参数:

    • y_true:真实的标记集合。
    • y_pred:预测的标记集合。
    • labels:一个列表,指定报告中出现哪些类别。
    • target_names:一个列表,指定报告中类别对应的显示出来的名字。
    • digits:用于格式化报告中的浮点数,保留几位小数。
    • sample_weight:样本权重,默认每个样本的权重为 1
  2. 分类评估报告的内容如下,其中:

    • precision列:给出了查准率。它依次将类别 0 作为正类,类别 1 作为正类…

    • recall列:给出了查全率。它依次将类别 0 作为正类,类别 1 作为正类…

    • recall列:给出了 二、性能度量 - 图6 值。

    • support列:给出了该类有多少个样本。

    • avg / total行:

      • 对于precision,recall,recall,给出了该列数据的算术平均。
      • 对于support列,给出了该列的算术和(其实就等于样本集总样本数量)。
    1. Classification Report:
    2. precision recall f1-score support
    3. class_0 0.62 1.00 0.77 5
    4. class_1 1.00 0.40 0.57 5
    5. avg / total 0.81 0.70 0.67 10

2.1.7 confusion_matrix

  1. confusion_matrix函数给出了分类结果的混淆矩阵。其原型为:

    1. sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None)

    返回值:一个格式化的字符串,给出了分类结果的混淆矩阵。

    参数:参考classification_report

  2. 混淆矩阵的内容如下,其中 二、性能度量 - 图7 表示真实标记为 二、性能度量 - 图8 但是预测为 二、性能度量 - 图9 的样本的数量。

    1. Confusion Matrix:
    2. [[5 0]
    3. [3 2]]

2.1.8 precision_recall_curve

  1. precision_recall_curve函数用于计算分类结果的P-R曲线。其原型为:

    1. sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_label=None,
    2. sample_weight=None)

    返回值:一个元组,元组内的元素分别为:

    • P-R曲线的查准率序列。该序列是递增序列,序列第 i 个元素是当正类概率的判定阈值为 thresholds[i]时的查准率。
    • P-R曲线的查全率序列。该序列是递减序列,序列第 i 个元素是当正类概率的判定阈值为 thresholds[i]时的查全率。
    • P-R曲线的阈值序列thresholds。该序列是一个递增序列,给出了判定为正例时的正类概率的阈值。

    参数:

    • y_true:真实的标记集合。
    • probas_pred:每个样本预测为正类的概率的集合。
    • pos_label:正类的类别标记。
    • sample_weight:样本权重,默认每个样本的权重为 1。

2.1.9 roc_curve

  1. roc_curve函数用于计算分类结果的ROC曲线。其原型为:

    1. sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None,
    2. drop_intermediate=True)

    返回值:一个元组,元组内的元素分别为:

    • ROC曲线的 二、性能度量 - 图10 序列。该序列是递增序列,序列第 i 个元素是当正类概率的判定阈值为 thresholds[i]时的假正例率。
    • ROC曲线的 二、性能度量 - 图11 序列。该序列是递增序列,序列第 i 个元素是当正类概率的判定阈值为 thresholds[i]时的真正例率。
    • ROC曲线的阈值序列thresholds。该序列是一个递减序列,给出了判定为正例时的正类概率的阈值。

    参数:

    • y_true:真实的标记集合。
    • y_score:每个样本预测为正类的概率的集合。
    • pos_label:正类的类别标记。
    • sample_weight:样本权重,默认每个样本的权重为 1。
    • drop_intermediate:一个布尔值。如果为True,则抛弃某些不可能出现在ROC曲线上的阈值。

2.1.10 roc_auc_score

  1. roc_auc_score函数用于计算分类结果的ROC曲线的面积AUC。其原型为:

    1. sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None)

    返回值:AUC值。

    参数:参考 roc_curve

2.2 回归问题性能度量

2.2.1 mean_absolute_error

  1. mean_absolute_error函数用于计算回归预测误差绝对值的均值(mean absolute error:MAE),其原型为:

    1. sklearn.metrics.mean_absolute_error(y_true, y_pred, sample_weight=None,
    2. multioutput='uniform_average')

    返回值:预测误差绝对值的均值。

    参数:

    • y_true:真实的标记集合。

    • y_pred:预测的标记集合。

    • multioutput:指定对于多输出变量的回归问题的误差类型。可以为:

      • 'raw_values':对每个输出变量,计算其误差 。
      • 'uniform_average':计算其所有输出变量的误差的平均值。
    • sample_weight:样本权重,默认每个样本的权重为 1。

2.2.2 mean_squared_error

  1. mean_squared_error函数用于计算回归预测误差平方的均值(mean square error:MSE),其原型为:

    1. sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None,
    2. multioutput='uniform_average')

    返回值:预测误差的平方的平均值。

    参数:参考mean_absolute_error