如何用Scikit-Learn GridSearchCV单次fit获取精确率、召回率、F1值
Scikit-Learn GridSearchCV 多指标调参单次拟合实现方案
完全不需要循环多次调用fit和predict方法,GridSearchCV原生支持传入多评价指标列表,单次拟合就能记录所有参数组合对应的三类指标得分。
具体实现步骤
1. 初始化时配置多指标参数
GridSearchCV的scoring参数支持直接传入包含多个评价指标标识的列表,你需要的三类指标对应的内置标识分别为'precision'、'recall'、'f1',如果是多分类任务,可以根据需求补充平均策略后缀,比如'f1_macro'、'recall_weighted'等。
示例代码:
from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC import pandas as pd # 定义待搜索的参数网格 param_grid = { 'C': [1, 10, 100], 'kernel': ['linear', 'rbf'] } # 定义多评价指标列表 scoring_list = ['precision', 'recall', 'f1'] # 初始化GridSearchCV grid_search = GridSearchCV( estimator=SVC(random_state=42), param_grid=param_grid, scoring=scoring_list, refit='f1', # 可选:指定按f1指标筛选最优模型后拟合全量数据,仅需得分可设为False cv=5, n_jobs=-1 ) # 单次调用fit完成所有交叉验证计算 grid_search.fit(X_train, y_train)
2. 访问所有参数组合的各指标得分
拟合完成后,所有交叉验证结果都存储在cv_results_属性中,该字典针对每个你指定的指标都会生成对应的得分字段,包括单折得分、平均得分、得分标准差,直接提取即可,也可以转成DataFrame做结构化展示:
# 转换为DataFrame便于查看 cv_results = pd.DataFrame(grid_search.cv_results_) # 提取参数组合+三类指标的平均交叉验证得分 target_result = cv_results[['params', 'mean_test_precision', 'mean_test_recall', 'mean_test_f1']] print(target_result)
补充说明
- 多分类任务必须指定指标的平均策略,否则默认是二分类指标计算逻辑,会触发报错
- 若仅需要统计各参数组合的指标得分,不需要输出最优模型,可以将
refit参数设为False,减少计算量
内容的提问来源于stack exchange,提问作者Zhao Li
相关产品推荐
相关产品推荐

