python-3.x - 如何从 XGBoostRegressor 获得可重现的结果?random_state 没有效果
问题描述
我意识到,与 scikit learn 不同,为 设置一个固定值random_state
并不能保证模型每次都会输出相同的结果。
因此,我无法从 XGBoostRegressor 获得可重现的结果,即使通过设置seed
、random_state
和.colsample_bytree
subsample
这是一个错误吗?这有点设计吗?如果是这样,为什么?
如果您有始终有效的解决方案或解决方法,请分享。
这是代码:
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,而在于数据拆分。
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)
推荐阅读
- ios - 结合 - receiveOn 有效,subscribeOn 无效,无论线程如何
- python - 为什么有些神经网络结构无法适应问题?
- php - 在 woocommerce 产品页面上隐藏多个产品属性
- javascript - 如何在 ReactJS 中将值从子组件传递给父组件
- python - “pip install email”错误python setup.py egg_info
- reactjs - 如何用@material-ui/pickers 修复@date-io/moment?TypeError:utils.getDayText 不是函数
- angular - 我应该使用异步方法使用离子电容器访问本地存储吗?
- spring-boot - @PropertySource 没有选择正确的属性文件
- python - selenium.common.exceptions.TimeoutException 在使用 Selenium Python 中的 expected_conditions presence_of_element_located 单击按钮时
- laravel - 将文件上传到 S3 时 Laravel 白屏(413 错误)