常见问题

本文档包含有关 XGBoost 的常见问题。

如何调整参数

请参阅参数调优指南

模型描述

请参阅梯度提升树介绍

我的数据集很大

XGBoost 旨在高效利用内存。通常,只要数据能载入内存,它就能处理问题。这通常意味着数百万个实例。

如果内存不足,请查看有关使用多种框架进行分布式训练的教程页面,或者使用外部内存版本来使用外部内存。

如何处理分类特征?

请访问此教程,了解分类数据处理的详细说明和一些示例。

为什么不在 X(Spark、Hadoop)之上实现分布式 XGBoost?

我们需要知道的第一个事实是,采用分布式并不一定能解决所有问题。相反,它会带来更多问题,例如更多的通信开销和容错性。最终的问题仍然是如何突破每个计算节点的极限,用更少的资源完成任务(从而减少通信和故障的机会)。

为了实现这些,我们决定重用单节点 XGBoost 中的优化,并在其之上构建分布式版本。机器学习中对通信的需求相当简单,我们可以依赖一组有限的 API。这种设计允许我们重用大部分代码,同时可移植到 Hadoop/Yarn、MPI、SGE 等主要平台。最重要的是,它突破了我们可使用的计算资源的极限。

如何将模型移植到我自己的系统?

XGBoost 的模型和数据格式是可互换的,这意味着由一种语言训练的模型可以在另一种语言中加载。这意味着您可以使用 R 训练模型,同时使用 Java 或 C++ 进行预测,这在生产系统中更为常见。您还可以使用分布式版本训练模型,并从 Python 加载它们以进行一些交互式分析。有关更多信息,请参阅模型 IO

您支持 LambdaMART 吗?

是的,XGBoost 实现了 LambdaMART。请查看参数中的目标函数部分。

如何处理缺失值

XGBoost 默认支持缺失值。在树算法中,缺失值的分支方向在训练期间学习。请注意,gblinear 助推器将缺失值视为零。

当指定missing参数时,输入预测变量中等于missing的值将被视为缺失并移除。默认设置为NaN

运行结果略有不同

这可能会发生,因为浮点求和顺序和多线程的非确定性。此外,分布式框架导致的数据分区变化也可能是一个问题。尽管总体准确性通常保持不变。

为什么稀疏数据和密集数据显示的结果不同?

“稀疏”元素被树助推器视为“缺失”,被线性助推器视为零。但是,如果我们将稀疏矩阵转换回密集矩阵,稀疏矩阵可能会用 0 填充缺失条目,而 0 是 xgboost 的有效值。简而言之,像 scipy 这样的稀疏矩阵实现将 0 视为缺失,而 0 是 XGBoost 决策树的有效分割值。