Python中两种GridSearchCV循环实现差异及ValueError报错排查
两种GridSearchCV实现的差异与报错原因
核心实现差异
- 实现1(列表推导式):每次循环会将新训练完成的
GridSearchCV实例追加到列表中,最终grid_searches是包含所有模型对应搜索结果的列表,长度与models/params的长度一致。 - 实现2(循环赋值):每次循环直接给
grid_searches重新赋值为仅包含当前模型搜索结果的新列表(覆盖之前的内容),最终grid_searches里只有最后一个模型的搜索结果,长度为1。
报错直接原因
绘图代码中,你试图遍历grid_searches[0:3](前3个模型的结果)与参数名、子图进行匹配,但实现2中grid_searches仅存最后一个模型的结果:
- 循环执行时,会用最后一个模型的
GridSearchCV实例去匹配第一个参数名(比如alpha)。 - 如果这个模型的
param_grid是多参数组合(比如同时调优l1_ratio和alpha),grid_search.param_grid[param_name](即alpha的取值列表)长度为50,但网格搜索的总参数组合数是50×50=2500,对应mean_train_score/mean_test_score的长度也是2500。 - 调用
ax.plot()时,x轴数据长度(50)与y轴数据长度(2500)不匹配,触发维度不匹配错误。
修复方法
将实现2中的赋值语句改为追加元素即可:
grid_searches = [] for m, grid in zip(models,params): grid_searches.append(GridSearchCV(m,grid,n_jobs=-1, cv = 3, return_train_score=True).fit(X,y))
内容的提问来源于stack exchange,提问作者AdiG
相关产品推荐
相关产品推荐

