如何计算多类的多个分数的交叉验证?

Asm*_*kki 1 python machine-learning scikit-learn cross-validation precision-recall

我正在用 python 开始我的第一个机器学习代码。但是,我在计算多类模型的召回率、精度和 f1 时遇到了错误。

X = pd.read_excel(path, dtype=int)
allarray = X.values
X_data = allarray[:,0:-1]
Y = allarray[:,-1]
X_scaled = scaler.fit_transform(X_data)

create_model = create_custom_model(n_features, n_classes, 8, 3)

estimator = KerasClassifier(build_fn=create_model, epochs=100, batch_size=100, verbose=0)
scores = cross_validate(estimator, X_scaled, Y, cv=10, scoring=('precision', 'recall', 'f1'), return_train_score=False)
print(scores['precision'])
print(scores['recall'])
print(scores['f1'])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError: Target is multiclass but average='binary'. Please choose another average setting.
Run Code Online (Sandbox Code Playgroud)

cross_validate没有参数average

des*_*aut 6

问题是average精度、召回率和 F1 分数的默认设置仅适用于二元分类。

你应该做的是将scoring=('precision', 'recall', 'f1')你的参数替换cross_validate为类似的东西

scoring=('precision_macro', 'recall_macro', 'f1_macro')
Run Code Online (Sandbox Code Playgroud)

每个指标都有多个可用的后缀选项 - macromicroweighted。请参阅文档、示例以及其中的分数链接。