Skip to content

如何更快地训练模型?

一些超参数会对模型质量和训练速度产生显著影响。

近似分割

默认情况下,使用精确分割进行学习。精确分割的替代方案是近似分割,后者学习速度更快(根据数据集不同,速度提升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 将缩短训练时间。

禁用袋外性能评估 [仅限随机森林]

compute_oob_performances=True(默认)时,在训练期间计算袋外评估。袋外评估是衡量模型质量的好方法,但它不影响训练。禁用 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模型学习的速度。学习过快通常会导致结果较差,但会生成更小、训练更快、运行更快的模型。shrinkage 默认值为0.1。你可以尝试0.15甚至0.2。