Scikit-learn 中的模型的多维指标评估方法
郝伟 2021/07/20

简介

在 Scikit-learn 中,提供了四个用于评估模型性能的方法:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

def evalute(y_true, y_pred, avgtype='binary'):
    '''使用4类指标来对预测结果进行评估''' 
    print(' datasize= {} '.format(len(y_true)).center(60, '*'))
    print('acc=', accuracy_score(y_true, y_pred))
    print('pre=', precision_score(y_true, y_pred, average=avgtype))
    print('rec=', recall_score(y_true, y_pred, average=avgtype))
    print('f1=', f1_score(y_true, y_pred, average=avgtype))

y_true = [1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0]
y_pred = [1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0]
evalute(y_true, y_pred)

输出为:

*********************** datasize= 17 ***********************
acc= 0.8235294117647058
pre= 0.875
rec= 0.7777777777777778
f1= 0.823529411764706

但是,默认的使用方法只合适二维数据,如果是多给数据就有问题。

多维数据

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

def evalute(y_true, y_pred, avgtype='binary'):
    '''使用4类指标来对预测结果进行评估''' 
    print(' datasize= {} '.format(len(y_true)).center(60, '*'))
    print('acc=', accuracy_score(y_true, y_pred))
    print('pre=', precision_score(y_true, y_pred, average=avgtype))
    print('rec=', recall_score(y_true, y_pred, average=avgtype))
    print('f1=', f1_score(y_true, y_pred, average=avgtype))

# 多维数据有0,1,2三个值
y_true = [1,1,0,2,0,2,0,1,1,1,2,1,0,0,2,0,0,1,1,2]
y_pred = [2,1,0,2,0,2,0,1,1,1,2,1,0,0,2,0,0,1,1,2]
evalute(y_true, y_pred, avgtype=None)

输出如下所示:

*********************** datasize= 20 ***********************
acc= 0.95
pre= [1.      1.          0.83333333]
rec= [1.      0.875       1.        ]
f1=  [1.      0.93333333  0.90909091]

在多维数据处理时的处理原则是:

所以,对于 pre, rec 和 f1 都是1行3列的输出,分别对应0, 1, 2的值预测。

多种分类情况

根据官网的pre函数的使用说明,averge 共有以下几种情况: