Scikit-learn 中的模型的多维指标评估方法
郝伟 2021/07/20
在 Scikit-learn 中,提供了四个用于评估模型性能的方法:
sklearn.metrics.accuracy_scoresklearn.metrics.precision_scoresklearn.metrics.recall_scoresklearn.metrics.f1_scorefrom 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 共有以下几种情况: