如何解决xgboost 的哪些功能受种子random_state影响?
除了将 seed=
参数传递给 numpy.random.seed
之外,Python API 没有提供更多信息:
seed (int) – 用于生成折叠的种子(传递给 numpy.random.seed)。
但是 xgboost
的哪些特征使用了 numpy.random.seed
?
- 即使更改种子,以所有默认设置运行
xgboost
仍会产生相同的性能。 - 我已经能够验证
colsample_bytree
是否这样做了;不同的种子产生不同的性能。 - 有人告诉我,
subsample
和其他colsample_*
特征也使用它,这似乎是合理的,因为任何形式的采样都需要随机性。
xgboost
的其他哪些功能依赖于 numpy.random.seed
?
解决方法
Boosted 树按顺序生长,一次迭代中的树生长分布在线程之间。为避免过拟合,通过以下参数引入随机性:
colsample_bytree
colsample_bylevel
colsample_bynode
-
subsample
(注意*sample*
模式) -
shuffle
在用于交叉验证的 CV 文件夹创建中
此外,您可能会在以下地方遇到不确定性,不受随机状态控制:
[GPU] 由于浮点求和的非关联性,直方图构建不是确定性的。
使用带有 Shotgun 更新程序的 gblinear booster 是不确定的,因为它使用 Hogwild 算法
当使用 GPU 排名目标时,由于浮点求和的非关联方面,结果不确定。
评论回复:你是怎么知道的?
了解这一点很有帮助:
-
了解树木的生长方式:Demystify Modern Gradient Boosting Trees(参考资料也可能有帮助)
-
扫描文档 full text 以获取感兴趣的条款:
random
、sample
、deterministic
、determinism
等 -
最后(首先?),了解为什么需要从袋装树(RANDOM FORESTS by Leo Breiman)和神经网络(Deep learning with Python by François Chollet,章节过拟合)也可能有帮助。
好吧,如果您想要详尽的列表,可以查看 GitHub 上的源代码。在 github 上用关键字搜索给出了很好的指示。
search for 'rand' - 15 个结果
search for 'seed' and python filter - 20 个结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。