GridSearchCV最优参数估计时访问cv_results_报KeyError:0问题
报错原因
KeyError: 0的触发逻辑非常明确:
GridSearchCV的cv_results_属性是字典类型,而非可以通过数字下标直接索引的列表。它的存储逻辑是:键为固定的结果字段名,值为按参数组合顺序排列的结果数组,字典中不存在名为0的键,直接写cv_results_[0]自然会触发键错误。- 你代码里使用的
.parameters、.cv_validation_scores、.mean_validation_scores是scikit-learn 0.20版本之前的废弃字段,新版本已经完全移除,就算索引方式改对了也会报属性/键错误。
正确代码写法
cv_results_中对应你需要的结果的合法键名如下:
params:存储所有参数组合的配置,值为列表,每个元素对应一组参数的字典split{n}_test_score:第n折交叉验证的验证集得分,n从0开始计数,折数和你设置的cv参数一致mean_test_score:每组参数对应所有折验证得分的平均值
取单组参数结果的示例(以索引为0的第一组参数为例,5折交叉验证场景):
# 确保GridSearchCV已经完成fit训练 # 取第一组参数的配置 print(grid.cv_results_['params'][0]) # 取第一组参数所有折的验证得分 fold_scores = [] for i in range(grid.cv): fold_scores.append(grid.cv_results_[f'split{i}_test_score'][0]) print(fold_scores) # 取第一组参数的平均验证得分 print(grid.cv_results_['mean_test_score'][0])
如果需要查看所有参数组合的结果,可以直接遍历:
param_total = len(grid.cv_results_['params']) for idx in range(param_total): print(f"参数组合{idx+1}:", grid.cv_results_['params'][idx]) print("平均验证得分:", grid.cv_results_['mean_test_score'][idx])
如果只需要最优参数的对应结果,不需要手动遍历索引,直接调用内置属性即可:
grid.best_params_:返回最优得分对应的参数配置grid.best_score_:返回最优参数对应的平均交叉验证得分
内容的提问来源于stack exchange,提问作者Aayushi Singh
相关产品推荐
相关产品推荐

