【发布时间】:2021-05-12 23:11:27
【问题描述】:
我正在使用 GridSearchCV 进行超参数优化
scoring_functions = {'mcc': make_scorer(matthews_corrcoef), 'accuracy': make_scorer(accuracy_score), 'balanced_accuracy': make_scorer(balanced_accuracy_score)}
grid_search = GridSearchCV(pipeline, param_grid=grid, scoring=scoring_functions, n_jobs=-1, cv=splitter, refit='mcc')
我将 refit 参数设置为 'mcc',因此我希望 GridSearchCV 选择最佳模型来最大化该指标。然后我计算一些分数
preds = best_model.predict(test_df)
metrics['accuracy'] = round(accuracy_score(test_labels, preds),3)
metrics['balanced_accuracy'] = round(balanced_accuracy_score(test_labels, preds),3)
metrics['mcc'] = round(matthews_corrcoef(test_labels, preds),3)
我得到了这些结果
"accuracy": 0.891, "balanced_accuracy": 0.723, "mcc": 0.871
现在,如果我这样做是为了在同一个测试集上获得模型的分数(不是先计算预测),就像这样
best_model = grid_search.best_estimator_
score = best_model.score(test_df, test_labels)
我得到的分数是这样的
"score": 0.891
如您所见,这是准确度,而不是 mcc 分数。根据 score 函数的文档,它说
返回给定数据的分数,如果估计器已经过调整。
这使用由提供的评分定义的分数,以及 best_estimator_.score 方法,否则。
我没有正确理解。我想如果我像我在 GridSearchCV 中使用 refit 参数指定的那样改装模型,结果应该是用于改装模型的评分函数?我错过了什么吗?
【问题讨论】:
-
你的
best_estimator_是什么模型,例如随机森林、knn...? -
随机森林我用 random_state 种子在管道上传递它,所以结果不应该改变
标签: python-3.x scikit-learn scoring gridsearchcv