python - XGBoost 训练时间似乎太长了
问题描述
我正在尝试使用 xgboost 包在 Python 中训练 XGBoost 分类器。我对分类器的所有参数使用默认值,我的训练集有大约 16,000 个元素和每个元素的 180,000 个特征。我没有使用 gpu 来训练模型,但训练过程仍然花费了五个多小时,并且仍在继续。我有 32GB 的 RAM 和 6 核 Intel I7。我想知道这是否是用我拥有的数据量训练这个分类器的正常时间,因为我听说有人在几分钟内训练模型。
解决方案
如果关注训练时间,则可以将树生长策略切换tree_method
到hist
基于直方图的方法。对于 GPU,它应该设置为gpu_hist
. 您可以在此处找到有关其 xgboost 实现的更多详细信息http://arxiv.org/abs/1603.02754
这是在不影响解决方案质量的情况下实现超快速训练的秘诀。事实上,基于 GPU 的训练甚至 lightGBM 等都依赖于基于直方图的技术来进行更快的训练和随后的迭代/实验,这在时间受限的 kaggle 类型的比赛中非常重要。hist
可能会将训练时间减少一半或更少,而gpu_hist
在 gpu 上可能需要几分钟。
PS:我建议通过删除相关/等级相关的特征来降低数据的维度(16k X 180k),这不仅可以进一步提高训练时间,还可以提高模型性能。