如何更快地训练模型?¶
一些超参数对模型质量和训练速度都有显著影响。
近似分裂¶
默认情况下,使用精确分裂进行学习。精确分裂的替代方案是近似分裂,它学习速度更快(根据数据集不同,速度提升 2 到 5 倍),但有时会导致质量下降。
通过设置 force_numerical_discretization=True
启用近似分裂。参数 max_unique_values_for_discretized_numerical
(默认为 16000)控制近似分裂的精度。值越小,算法速度越快,但也可能导致分裂精度较低。
如果训练时间有限,使用近似分裂并在优化其他超参数的同时,可以实现更快的训练和更高的精度。
关于其他库
在 XGBoost 中,可以通过设置 tree_method="hist"
启用近似分裂。
LightGBM 始终使用近似分裂。
分布式训练¶
分布式训练将模型训练的计算成本分摊到多台计算机上。换句话说,模型不再在单台机器上训练,而是在多台机器上并行训练。这可以显著加快训练过程,并允许使用更大的数据集。对于小型数据集,分布式训练没有帮助。
树的数量¶
训练时间与树的数量成正比。减少树的数量将缩短训练时间。
候选属性比例¶
训练时间与 num_candidate_attributes_ratio
成正比。减小 num_candidate_attributes_ratio
将缩短训练时间。
禁用 OOB 性能 [仅限 RF]¶
当 compute_oob_performances=True
(默认)时,在训练期间计算袋外 (Out-of-bag) 评估。OOB 评估是衡量模型质量的好方法,但它不影响训练。禁用 compute_oob_performances
将加快随机森林模型的训练速度。
设置最大训练时间¶
maximum_training_duration_seconds
控制模型的最大训练时间。
减少测试的斜投影¶
训练稀疏斜模型 (split_axis=SPARSE_OBLIQUE
) 时,测试的投影数量由 num_features^num_projections_exponent
定义。减小 num_projections_exponent
将加快训练速度。
增加训练线程数¶
默认训练线程数设置为机器的核心数,最多 32 个。如果机器有超过 32 个核心,训练线程数将被限制在 32 个。在这种情况下,手动将 num_threads
参数设置为更大的值可以加快训练速度。
增加收缩率 [仅限 GBT]¶
"收缩率"(有时也称为"学习率")决定了 GBT 模型学习的速度。学习过快通常会导致较差的结果,但会生成更小、训练更快、运行更快的模型。shrinkage
默认为 0.1。您可以尝试 0.15 或 0.2。