常见问题
本文档包含关于 XGBoost 的常见问题解答。
如何调整参数
参见 参数调优指南。
模型描述
参见 Boosted Trees 简介。
我有一个大数据集
XGBoost 设计为内存高效。通常情况下,只要数据能放入内存,它就能处理问题。这通常意味着可以处理数百万个实例。
如何处理分类特征?
访问 本教程 以了解分类数据处理的逐步指南和一些实际示例。
为什么不基于X(Spark,Hadoop)实现分布式XGBoost?
我们需要知道的第一件事是,分布式并不一定能解决所有问题。相反,它会产生更多问题,如更多的通信开销和容错性。最终的问题仍然是如何推动每个计算节点的极限,并使用更少的资源来完成任务(从而减少通信和失败的机会)。
为了实现这些,我们决定重用单节点 XGBoost 中的优化,并在其基础上构建分布式版本。机器学习中的通信需求相当简单,因为我们依赖于一组有限的 API(在我们的例子中是 rabit)。这种设计使我们能够重用大部分代码,同时可移植到 Hadoop/Yarn、MPI、SGE 等主要平台。最重要的是,它推动了我们能够使用的计算资源极限。
如何将模型移植到我自己的系统上?
XGBoost 的模型和数据格式是可交换的,这意味着用一种语言训练的模型可以在另一种语言中加载。这意味着你可以使用 R 训练模型,而在生产系统中更常见的 Java 或 C++ 中运行预测。你也可以使用分布式版本训练模型,并从 Python 加载它们进行一些交互式分析。更多信息请参见 模型输入输出。
你们支持 LambdaMART 吗?
是的,XGBoost 实现了 LambdaMART。请查看 参数 中的目标部分。
如何处理缺失值
XGBoost 默认支持缺失值。在树算法中,缺失值的分支方向在训练过程中学习。注意,gblinear 提升器将缺失值视为零。
当指定 missing 参数时,输入预测器中等于 missing 的值将被视为缺失并移除。默认情况下,它被设置为 NaN。
运行结果略有不同
这可能会发生,由于浮点求和顺序和多线程中的不确定性。此外,分布式框架的数据分区变化也可能是一个问题。尽管总体精度通常会保持不变。
为什么我在稀疏和密集数据上看到不同的结果?
“稀疏”元素在树增强器中被视为“缺失”,而在线性增强器中被视为零。然而,如果我们把稀疏矩阵转换回稠密矩阵,稀疏矩阵可能会用0填充缺失的条目,这对xgboost来说是一个有效值。