如何更快地训练模型?
一些超参数会对模型质量和训练速度产生显著影响。
近似分割
默认情况下,使用精确分割进行学习。精确分割的替代方案是近似分割,后者学习速度更快(根据数据集不同,速度提升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。