1 回答

TA贡献1777条经验 获得超10个赞
基本的网格搜索和模型拟合取决于用于不同目的的随机数生成器。在scikit-learn中,这是由param控制的random_state
。查看我的其他答案以了解它:
现在以您的情况为例,我可以想到这些随机数生成会影响训练的因素:
1)GridSearchCV
默认情况下,将使用3折的KFold进行回归任务,这可能会在不同的运行中以不同的方式拆分数据。有可能发生在两个网格搜索过程中发生的分裂是不同的,因此分数也不同。
2)您正在使用单独的测试数据来计算GridSearchCV无法访问的mse。因此,它将找到适合于所提供数据的参数,该参数可能对单独的数据集完全有效,也可能不完全有效。
更新:
我现在看到您已经random_state
在参数网格中使用了模型,因此现在第3点不再适用。
3)您尚未显示model
正在使用哪个。但是,如果训练过程中的模型使用的是数据子样本(例如选择较少数量的特征,或者较少数量的行进行迭代,或者针对不同的内部估计量),那么您也需要修正该问题以获得相同的分数。您需要先修复该问题,然后再检查结果。
推荐范例
您可以从以下示例中获取想法:
# Define a custom kfold
from sklearn.model_selection import KFold
kf = KFold(n_splits=3, random_state=0)
# Check if the model you chose support random_state
model = WhateEverYouChoseClassifier(..., random_state=0, ...)
# Pass these to grid-search
gs = GridSearchCV(model, param_grid, scoring='neg_mean_absolute_error', cv = kf)
然后通过更改参数网格再次进行您做的两个实验。
添加回答
举报