Python 如何使用交叉验证对多类数据集中的精度、召回率和f1分数进行评分?

Python 如何使用交叉验证对多类数据集中的精度、召回率和f1分数进行评分?,python,scikit-learn,cross-validation,Python,Scikit Learn,Cross Validation,此代码适用于具有2个类的数据集,但不适用于多个类 scoring = {'accuracy' : make_scorer(accuracy_score), 'precision' : make_scorer(precision_score), 'recall' : make_scorer(recall_score), 'f1_score' : make_scorer(f1_score)} scores = cross_val_score(gnb,x,

此代码适用于具有2个类的数据集,但不适用于多个类

scoring = {'accuracy' : make_scorer(accuracy_score), 
       'precision' : make_scorer(precision_score),
       'recall' : make_scorer(recall_score), 
       'f1_score' : make_scorer(f1_score)}
scores = cross_val_score(gnb,x,y, cv=5, scoring=scoring)
print(scores)
错误显示

ValueError: For evaluating multiple scores, use sklearn.model_selection.cross_validate instead. {'accuracy': make_scorer(accuracy_score), 'precision': make_scorer(precision_score, average=None), 'recall': make_scorer(recall_score), 'f1_score': make_scorer(f1_score)} was passed
ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].
当我检查代码时,像这样修改了它

scores = cross_val_score(gnb,x,y, cv=5, scoring='precision')
错误显示

ValueError: For evaluating multiple scores, use sklearn.model_selection.cross_validate instead. {'accuracy': make_scorer(accuracy_score), 'precision': make_scorer(precision_score, average=None), 'recall': make_scorer(recall_score), 'f1_score': make_scorer(f1_score)} was passed
ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].

当我在
make\u scorer

中设置
平均值时,它不起作用。为f1使用评分功能“
f1\u宏”
”或“
f1\u微”

同样地,
recall_macro
”或“
recall_micro
”用于调用

在计算精度或召回率时,定义正类很重要,但在多类数据集中,很难定义正类

因此,应计算每个类值(即迭代每个值并将其视为正类)的平均精度(召回率)

编辑。

尝试使用以下代码(微平均精度、召回率、f1)


对f1使用计分功能“
f1\u宏”
”或“
f1\u微”

同样地,
recall_macro
”或“
recall_micro
”用于调用

在计算精度或召回率时,定义正类很重要,但在多类数据集中,很难定义正类

因此,应计算每个类值(即迭代每个值并将其视为正类)的平均精度(召回率)

编辑。

尝试使用以下代码(微平均精度、召回率、f1)


谢谢,但是没有定义名称“f1_宏”,等等。。你能告诉我如何定义评分函数吗?我添加了一个代码,并参考了它。参考sklearn.metrics.make_score from。我已经尝试过这种方法。。。仍不工作错误仍显示目标为多类,但平均值为“二进制”。请选择另一个平均值设置,即[无、'微'、'宏'、'加权']中的一个。这是我的核心..准确度=交叉值分数(gnb,x,y,cv=5,评分class='准确度')精度=交叉值分数(gnb,x,y,cv=5,评分class='精密度\宏')召回=交叉值分数(gnb,x,y,cv=5,评分class='召回宏')f1=交叉值分数(gnb,x,y,cv=5,评分class='f1宏')打印(精度)打印(精度)打印(召回)打印(f1)此代码正在运行..:谢谢,但尚未定义名称“f1_宏”,等等。。你能告诉我如何定义评分函数吗?我添加了一个代码,并参考了它。参考sklearn.metrics.make_score from。我已经尝试过这种方法。。。仍不工作错误仍显示目标为多类,但平均值为“二进制”。请选择另一个平均值设置,即[无、'微'、'宏'、'加权']中的一个。这是我的核心..准确度=交叉值分数(gnb,x,y,cv=5,评分class='准确度')精度=交叉值分数(gnb,x,y,cv=5,评分class='精密度\宏')召回=交叉值分数(gnb,x,y,cv=5,评分class='召回宏')f1=交叉值分数(gnb,x,y,cv=5,评分class='f1宏')打印(精度)打印(精度)打印(召回)打印(f1)此代码正在运行..:D