模型评估指标——sklearn.metrics模块

发布时间 2023-04-21 19:50:25作者: 木田心

sklearn.metrics模块

  • 该模块主要包含分数函数、性能指标、成对指标、距离计算

1. 分类性能指标

1.1. accuracy_score()

  • 计算所有样本中分类正确样本所占的比例

  • 语法

    ## 语法
    sklearn.metrics.accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None)
    

    y_true:y的真实值

    y_pred:y的预测值

    normalize:若为True(默认),返回分类得分,若为False,返回分类正确的样本个数

    sample_weight:样本权重

  • 返回值是得分,若normalize=True,返回值是float型

  • 在二分类问题中,等价于jaccard_score

1.2. f1_score()

  • 计算F1得分,即precision和recall的调和平均数

    \(F1 = 2 * (precision * recall) / (precision + recall)\)

    \(precision=\frac{TP}{TP+FP}\)

    \(recall=\frac{TP}{TP+FN}=TPR=sensitivity\)

  • 若为多分类或多标签问题,则是每个类别的F1得分的平均值,各个类别所占的权重根据参数average指定

  • 语法

    ## 语法
    sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
    

    y_true:y的真实值

    y_pred:y的预测值

    labels:array-like,若average!='binary'时,表示标签集的顺序

    pos_label:str or int,当average='binary',且是二分类问题时,指明要计算得分的类别,当average!='binary'时,不起作用

    average:{‘micro’, ‘macro’, ‘samples’, ‘weighted’, ‘binary’} or None,针对多分类问题,若为None,则返回每类的得分,否则,通过指定的方式计算每类得分的平均值

    micro:通过计算所有真阳性、假阴性、假阳性来全局的计算得分

    macro:计算每类的得分,再求未加权平均值

    weighted:计算每类的得分,再计算加权平均值,根据每类的真实样本数设置权重

    samples:计算每个实例的指标,再求均值

    binary:仅适用于二分类问题,返回pos_label指定的类别的结果

    sample_weight:样本权重

    zero_division:当precision或recall无定义时,默认指标返回0,并引发警告

  • 返回值为F1得分,float或float的数组

1.3. jaccard_score()

  • 计算jaccard相似系数得分,等于两个标签集的交集的大小除以并集的大小

  • 语法

    ## 语法
    sklearn.metrics.jaccard_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
    

    参数与f1_score的参数一样

  • 返回值为jaccard相似系数得分,float或float的数组

1.4. roc_auc_score()

  • 计算auc,即ROC曲线下面积

  • 语法

    sklearn.metrics.roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None)
    

    y_true:y的真实标签

    y_score:估计器计算出的每个样本属于每种类别的概率,如果是二分类,则是estimator.predict_proba(X)[:,1],或者是estimator.decision_function(X);如果是多分类或多标签,则是(n_samples, n_classes)形状的概率

    average:{‘micro’, ‘macro’, ‘samples’, ‘weighted’} or None

    多分类仅对macro和weighted有效,None仅对multi_class='ovr'有效,micro仅对multi_class='ovr'有效

    sample_weight:样本权重

    max_fpr:float > 0 and <= 1,仅对二分类有效,若不是None,对AUC在[0,max_fpr]范围内标准化

    multi_class:{‘raise’, ‘ovr’, ‘ovo’},仅适用于多分类

    raise:引发错误

    ovr:One-vs-rest,计算每类相对于其余类别的AUC,对类别不均衡较敏感

    ovo:One-vs-one,计算所有可能的成对类别的平均AUC,对类别不均衡不敏感

    labels:仅适用于多分类目标,索引y_score种类别标签的列表,即y_score中的类别是按照labels中顺序排列的

  • 返回auc值,float

1.5. roc_curve()

  • 仅限于二分类问题,计算真阳率、假阳率

  • 语法

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

    y_true:真实类别,如果不是{-1,1}或{0,1},那么pos_label参数需要明确给出

    pos_label:正类的标签,若为None,而二分类为{-1,1}或{0,1},则正类被设置为1

    sample_weight:样本权重

    drop_intermediate:是否去掉一些不会出现在绘制的ROC曲线上的次优阈值

  • 返回值

    fpr:针对每个阈值的假阳率

    tpr:针对每个阈值的真阳率

    thresholds:一列递减的用来判断正负样本的阈值,最大值设置为max(y_score)+1

1.6. auc()

  • 使用梯形规则计算AUC值

    sklearn.metrics.auc(x, y)
    

    x:x的坐标,递增或递减的,即假阳率

    y:y的坐标,即真阳率

1.7. classification_report()

  • 构建一个文本报告,展示主要的分类指标

  • 语法

    sklearn.metrics.classification_report(y_true, y_pred, *, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False, zero_division='warn')
    

    labels:要包含在报告中的标签索引的列表

    target_names:对应labels的名字

    digits:格式化输出浮点型数据的小数位数,若output_dict=True,则该参数会被忽视,不会四舍五入

    output_dict:若为True,则返回输出为字典

  • 返回值为str或dict,返回每类的precision, recall, F1 score

2. 回归性能指标

2.1. r2_score()

  • 计算回归决定系数

    \(R^2(y,\hat y)=1-\frac{\sum_{i=1}^n (y_i-\hat y_i)^2}{\sum_{i=1}^n (y_i-\bar y)^2}\)

    最大值是1,等于1表示性能最好,可能会出现负值

  • 语法

    sklearn.metrics.r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', force_finite=True)
    

    y_true:目标真实值

    y_pred:目标的预测值

    sample_weight:样本权重

    multioutput:{‘raw_values’, ‘uniform_average’, ‘variance_weighted’}, array-like of shape (n_outputs,) or None,用来定义多个输出分数的聚合

    raw_values:在多输出输入的情况下,返回一组完整的分数。

    uniform_average:所有输出的分数均采用相同权重进行平均

    variance_weighted:加权平均,根据每个单独输出的方差进行加权。

    force_finite:若为True,当得分出现NaN和-Inf时,分别用1和0代替

  • 返回值是\(R^2\),float

2.2. mean_squared_error()

  • 计算MSE,均方误差

    \(MSE(y,\hat y)=\frac{1}{n}\sum_{i=1}^n (y_i-\hat y_i)^2\)

    n是样本量

  • 语法

    sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)
    

    multioutput:{‘raw_values’, ‘uniform_average’} or array-like of shape (n_outputs,)

    squared:若为True,返回MSE值,若为False,返回RMSE值

  • 返回float or ndarray of floats,非负,当等于0时模型效果最好