【问题标题】:XGBoost training time seems to be too longXGBoost 训练时间似乎太长了
【发布时间】:2020-04-23 14:56:29
【问题描述】:

我正在尝试使用 xgboost 包在 Python 中训练 XGBoost 分类器。我对分类器的所有参数使用默认值,我的训练集有大约 16,000 个元素和每个元素的 180,000 个特征。我没有使用 gpu 来训练模型,但训练过程仍然花费了五个多小时,并且仍在继续。我有 32GB 的 RAM 和 6 核 Intel I7。我想知道现在是否是用我拥有的数据量训练这个分类器的正常时间,因为我听说有人在几分钟内训练模型。

【问题讨论】:

  • 似乎库提供了一些必须启用的并行编程功能,你这样做了吗?
  • @AMC 。感谢您的答复。我已将 nthread 参数设置为 -1,以便在训练期间使用所有可用内核。我不确定这是否是您的意思,但即使使用了所有内核,它也非常慢。我不知道这是否有帮助,但我在训练期间的内存使用率为 99%。
  • 我不熟悉这个库,有什么方法可以尝试在一小部分数据上运行程序吗?这样你就可以判断程序是慢还是有问题/挂起。
  • @AMC 。当然。我尝试用 50 和 100 个样本的子集训练模型。每个分别需要大约 40 和 80 秒。我算了一下,整个训练集最多只需要 4 个小时,但是即使过了 5 个小时也没有结束
  • 我已经算过了什么算术?不过这很好,至少我们可以确定程序没有损坏。

标签: python machine-learning xgboost training-data


【解决方案1】:

如果关注训练时间,则可以将树生长策略tree_method 切换为hist,这是基于直方图的方法。对于 GPU,它应该设置为gpu_hist。您可以在此处找到有关其 xgboost 实现的更多详细信息http://arxiv.org/abs/1603.02754

这是在不影响解决方案质量的情况下实现超快速训练的秘诀。事实上,基于 GPU 的训练甚至 lightGBM 等都依赖于基于直方图的技术来进行更快的训练和随后的迭代/实验,这在时间受限的 kaggle 类型的比赛中非常重要。 hist 可能会将训练时间缩短一半或更少,而在 gpu 上的 gpu_hist 可能需要几分钟。

PS:我建议通过删除相关/等级相关的特征来降低数据的维度 (16k X 180k),这不仅可以进一步提高训练时间,还可以提高模型性能。

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 2020-05-19
    • 1970-01-01
    • 2019-01-09
    • 2020-05-05
    • 2021-07-09
    • 2021-01-12
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多