常见问题
此文档包含有关 xgboost 的常见问题。
如何调参
参阅 参数调整指南
模型的描述
我有一个很大的数据集
XGBoost 被设计为 memory efficient(高效使用内存)的。通常数据符合你的内存就可以处理问题(这通常意味着数百万个实例)。 如果内存不足,请查看 外部存储器版本 或 xgboost 的 分布式版本 。
在平台 X(Hadoop/Yarn, Mesos)上运行 xgboost
XGBoost 的分布式版本被设计为可移植到各种环境。 分布式 XGBoost 可以移植到任何支持 rabit 的平台上。 你可以直接在 Yarn 上运行 xgboost 。理论上 Mesos 和其他资源分配引擎也可以很容易地支持。
为什么不在 X(Spark, Hadoop)之上实现分布式 xgboost
我们需要知道的第一个事实是分布式并不一定能解决所有的问题。 相反,它会产生更多的问题,如更多的通信开销和容错。 最终的问题还是要回到如何推动每个计算节点的限制,并使用更少的资源来完成任务(从而减少通信和失败的机会)。
为了实现这些,我们决定在单个节点 xgboost 中重用优化,并在其上构建分布式版本。 机器学习中的通信需求是相当简单的,因为我们可以依赖于一套有限的 API(在我们的案例中)。 这样的设计使我们能够重用大部分代码,同时可以移植到 Hadoop/Yarn, MPI, SGE 等主流平台上。 最重要的是,它推动了我们可以使用的计算资源的限制。
如何将模型移植到我自己的系统中
XGBoost 的模型和数据格式是可交换的,这意味着一种语言训练的模型可以加载到另一种语言。 这意味着您可以使用 R 训练模型,同时使用 Java 或 C++ 进行预测,这在生产系统中更为常见。 您还可以使用分布式版本训练模型,并从 Python 加载它们以进行一些交互式分析。
你支持 LambdaMART 吗
是的,xgboost 实现了 LambdaMART 。在 参数 中可以查看到你想要的部分。
如何处理缺失值
xgboost 默认是支持缺失值的。
运行结果略有不同
由于浮点求和顺序和多线程的非确定性,可能会发生这种情况。 虽然一般的准确性通常会保持不变。