GridSearchCV的best_score_与best_estimator_的cross_val_score不一致原因问询
GridSearchCV最优得分与单独交叉验证得分差异的原因
导致两个得分不一致的常见原因如下:
- 估计器自身的随机种子未固定
随机森林(RandomForestRegressor)等集成模型的训练过程包含大量随机操作,比如单棵树的分裂节点采样、训练集行/列采样等,这些随机性由估计器自身的random_state参数独立控制,全局np.random.seed()仅能控制numpy层面的随机逻辑,无法覆盖sklearn估计器内部的随机流程。如果初始化forest_reg时没有传入固定的random_state值,即使KFold划分完全一致,两次交叉验证过程中训练出的模型也会存在差异,最终得分不同。 - 并行运算导致随机状态不一致
如果你在初始化GridSearchCV时设置了n_jobs参数大于1(启用多进程/多线程并行),并行子进程的随机数生成不受主进程的全局随机种子控制,会导致GridSearchCV交叉验证过程中每折训练的模型存在随机差异,和单线程运行的cross_val_score结果不一致。 - 数据预处理逻辑的随机性
如果你的forest_reg是包含预处理步骤的Pipeline,且预处理逻辑本身存在随机性(比如随机降采样、随机特征选择等)但没有固定随机种子,也会导致两次交叉验证的结果出现差异。
注:你两段代码中的得分计算逻辑是一致的,都是先对5折的负均方误差取平均,再取负开根号,不存在计算顺序的问题。
内容的提问来源于stack exchange,提问作者cosmogato
相关产品推荐
相关产品推荐

