如何从 XGBoostRegressor 获得可重复的结果?random_state 没有效果

len*_*enz 5 machine-learning python-3.x xgboost

我意识到,与 scikit learn 相反,设置固定值并random_state不能保证模型每次都会输出相同的结果。

seed因此,即使通过设置、和random_state,我也无法从 XGBoostRegressor 获得可重现的结果。colsample_bytreesubsample

这是一个错误吗?这是设计使然吗?如果是这样,为什么?

如果您有始终有效的解决方案或解决方法,请分享。

这是代码:

model = XGBRegressor(n_estimators=1000, learning_rate=0.05,
                     subsample=0.8, colsample_bytree= 0.8, seed=42)

model.fit(X_train_trf,y_train,
        early_stopping_rounds=5,
        eval_set=[(X_train_trf, y_train), (X_valid_trf, y_valid)],
        verbose=False)
preds = model.predict(X_valid_trf)
Run Code Online (Sandbox Code Playgroud)

jar*_*rot 1

在回答您的问题时,细微的差异可以通过浮点求和顺序和多线程的非确定性来解释,但总体梯度提升并不真正适合可重复地构建模型。您可以通过调整参数(例如设置 random_state、种子、输入特征、模型参数以及我在上面的评论中提出的建议)来控制很多随机性,但总的来说,您在构建模型时预计会出现一些小的变化,因为算法有效;特别是当数据中的信号不强时。