XGBoost论文——时间复杂度分析

机器算法验证 助推 时间复杂度
2022-03-23 01:59:33

我正在阅读XGBoost 论文,我对 4.1 中标题为“时间复杂度分析”的小节感到困惑。在这里,作者断言精确的贪心算法与K树,最大深度d每棵树,和x0“训练数据中的非缺失条目”,使用原始的稀疏感知算法,会产生 前 3 个因素对我来说很有意义(部分) - 我将其解释为:

O(Kdx0logn).
Kdx0

  • 棵树,给你KK
  • 在每棵树的层中,您需要扫描块条目以找到最佳分割。(我的理解是是非零特征值的总数,聚合在所有特征列和所有训练示例中。这意味着每个块由 CSC 格式的数字。)这给出了一个因子dx0x03x0dx0

但是,我不确定应该表示什么(本文的本节未指定)或因子来自何处。根据本文前面的用法,我假设是训练示例的数量,但我不清楚这如何导致精确贪心算法的时间复杂度乘法增加。nlognnlogn

有谁了解作者是如何达到这种时间复杂度的?任何帮助将非常感激。

1个回答

回答了我自己的问题 - 结果我误读了这篇论文。

原始的稀疏贪心算法不使用块存储。因此,要在每个节点上找到最佳拆分,您需要对每列的数据重新排序。这最终会导致每一层的时间复杂度非常粗略地近似为:基本上,假设你有每个特征的非零条目 ; 然后在每一层你排序列表,每个长度最多为,其长度总和为,不能超过时间。乘以树和层可以得到原始的O(x0logn)x0i1imni=1mx0i=x0O(x0logn)KdO(Kdx0logn)时间复杂度。

另一方面,使用块结构,由于数据在开始时已经按每列进行了预排序,因此无需在每个节点重新排序,只要在每个节点跟踪哪些数据即可点已到达该节点。正如作者所指出的,这将复杂度降低到(因为现在可以通过对块的单次扫描找到每一层的最佳分割)加上任何成本预处理是(作者声称它是,这是有道理的)。O(Kdx0)O(x0logn)