RandomizedSearchCV 和 GridsearchCV 结果不可重现

Posted

技术标签:

【中文标题】RandomizedSearchCV 和 GridsearchCV 结果不可重现【英文标题】:RandomizedSearchCV and GridsearchCV results are not reproducible 【发布时间】:2018-01-31 21:43:10 【问题描述】:

我正在 python 中执行 RandomForest 和 AdaBoost 回归

我的结果不可重现 [我的预测每次运行都使用相同的数据和代码]

seed = np.random.seed(22)
rng = np.random.RandomState(1)      

param_grid = 'n_estimators': [10, 100, 1000]
model_rfr = GridSearchCV(RandomForestRegressor(random_state = rng), param_grid, cv=3, n_jobs=-1, verbose=1)
model_rfr.fit(train_x1,train_y1)
test_rfr = model_rfr.predict(test_y1)
param_grid = "n_estimators":[100,500],"learning_rate":list(np.linspace(0.01,1,10)),"loss":["linear", "square", "exponential"]
model_adr = RandomizedSearchCV(AdaBoostRegressor(DecisionTreeRegressor()), param_grid,n_jobs=-1,n_iter=10,cv=3,random_state = rng)
model_adr.fit(train_x1,train_y1)
test_adr = model_adr.fit(test_y1)

这里 test_adr 和 test_rfr 的值会发生变化,每一次,我都会运行我的代码。

请使用任何样本数据进行回归。但请建议如何使我的结果可重现。

【问题讨论】:

++ 现在 Gridsearch 结果可重现,建议使用 RandomizedCV 另外,predict() 方法应该使用test_x1 发送,而您发送的是test_y1,并且代码的最后一行应该是model_adr.predict(),而不是model_adr.fit() AdaBoostRegressor 和 DecisionTreeRegressor 也有 random_state 参数。有了这些,我可以复制结果 感谢您的帮助,我知道了。但是有了一些 random_state 值,我得到了更好的结果,我可以优化它吗?并使其可重现? 不,random_state 不是为了优化。认为这是幸运的。这可能并非每次都如此。只相信多重交叉验证的平均输出。 【参考方案1】:

感谢您的贡献。请找到可重现的结果代码。

seed = np.random.seed(22)
rng = np.random.RandomState(1)
param_grid = 'n_estimators': [10, 100, 1000]
model_rfr = GridSearchCV(RandomForestRegressor(random_state = rng), param_grid, cv=3, n_jobs=-1, verbose=1)
model_rfr.fit(train_x1,train_y1)
test_rfr = model_rfr.predict(test_y1)
param_grid = "n_estimators":[100,500],"learning_rate":list(np.linspace(0.01,1,10)),"loss":["linear", "square", "exponential"]
model_adr = RandomizedSearchCV(AdaBoostRegressor(DecisionTreeRegressor(random_state = rng)), param_grid,n_jobs=-1,n_iter=10,cv=3,random_state = rng)
model_adr.fit(train_x1,train_y1)
test_adr = model_adr.predict(test_x1)

【讨论】:

以上是关于RandomizedSearchCV 和 GridsearchCV 结果不可重现的主要内容,如果未能解决你的问题,请参考以下文章

将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)

sklearn:在 RandomizedSearchCV 中使用管道?

使用 RandomizedSearchCV 进行随机森林调优

grid search 超参数寻优

如何为 RandomizedSearchCV 使用预定义拆分

如何使用 RandomizedSearchCV 正确实现 StratifiedKFold