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
问题是average
精度、召回率和 F1 分数的默认设置仅适用于二元分类。
你应该做的是将scoring=('precision', 'recall', 'f1')
你的参数替换cross_validate
为类似的东西
scoring=('precision_macro', 'recall_macro', 'f1_macro')
Run Code Online (Sandbox Code Playgroud)
每个指标都有多个可用的后缀选项 - macro
、micro
等weighted
。请参阅文档、示例以及其中的分数链接。