【发布时间】:2020-08-29 00:31:39
【问题描述】:
我意识到,与 scikit learn 不同,为random_state 设置一个固定值并不能保证模型每次都会输出相同的结果。
因此,即使通过设置 seed、random_state、colsample_bytree 和 subsample,我也无法从 XGBoostRegressor 获得可重现的结果。
这是一个错误吗?这有点设计吗?如果是这样,为什么?
如果您有始终有效的解决方案或变通方法,请分享。
代码如下:
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)
【问题讨论】:
-
这是一个“提前停止”的问题吗?如果您发布一个可重现的最小示例,我们可以帮助您解决问题。
-
好的,我今天加一下
-
或者你能给我一个可重现的 XGBoost 模型的代码示例吗?
-
将
subsample和colsample_bytree更改为 '1' 并将early_stopping_rounds增加到 '1000' (或任何 n_estimators 设置)应该可以解决问题 - 让我知道这是否可以解决您的问题与否。 -
您的结果有何不同?细微的差异可以通过浮点求和顺序和多线程的不确定性来解释,但整体梯度提升并不能真正让您以可重复的方式构建模型。您可以通过调整参数来控制很多随机性(例如我上面提出的建议),但总的来说,如果数据中的信号不强,您预计最终模型会出现一些变化。抱歉,我对此无能为力 - 根据我自己的经验,每次使用概述的方法时,我都会得到相同的模型 -> 我想这取决于你正在分析的数据
标签: python-3.x machine-learning xgboost