首页 > 解决方案 > 如何从 XGBoostRegressor 获得可重现的结果?random_state 没有效果

问题描述

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

因此,我无法从 XGBoostRegressor 获得可重现的结果,即使通过设置seedrandom_state和.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)

标签: python-3.xmachine-learningxgboost

解决方案


作为参考,问题不在于 XGBoost,而在于数据拆分。

train_test_split我在没有设置 的情况下拆分数据random_state,这导致了一些随机性。

固定如下:

X_train_full, X_valid_full, y_train, y_valid = train_test_split(X_full, y,
  train_size=0.8, test_size = 0.2, random_state=1)

推荐阅读