来源:https://github.com/microsoft/LightGBM/blob/master/docs/Parameters-Tuning.rst
一、调优参数Leaf-wise树(最佳优先)
LightGBM使用叶向树生长算法,而许多其他流行的工具使用深度树生长。与深度增长算法相比,叶向增长算法收敛速度更快。然而,如果不使用合适的参数,叶向生长可能会过拟合。
要使用叶状树获得良好的结果,以下是一些重要的参数:
1、num_leaves。这是控制树模型复杂度的主要参数。理论上,我们可以设置num_leaves = 2^(max_depth)来获得与深度树相同数量的叶子。然而,这种简单的转换在实践中并不好。原因是,对于固定数量的叶子,叶型树通常比深度型树要深得多。无约束深度会引起过拟合。因此,当尝试优化num_leaves时,我们应该让它小于2^(max_depth)。例如,当max_depth=7时,深度树可以获得很好的精度,但是将num_leaves设置为127可能会导致过拟合,将其设置为70或80可能会比深度树获得更好的精度。
2、min_data_in_leaf。这是防止叶状树过度拟合的一个非常重要的参数。它的最优值取决于训练样本的数量和num_leaves。将它设置为一个大的值可以避免树长得太深,但是可能会导致不合适。实际上,将其设置为数百或数千对大型数据集来说就足够了。
3、max_depth。还可以使用max_depth显式地限制树的深度。
二、更快的速度
1、通过设置bagging_fraction和bagging_freq来使用bagging
2、通过设置feature_fraction使用特征子采样
3、使用小型max_bin
4、在以后的学习中使用save_binary来加速数据加载
5、使用并行学习,参考并行学习指南
三、为了更好的精度
1、使用大的max_bin(可能会慢一些)
2、使用小的learning_rate和大的num_iteration
3、使用大的num_leaves(可能导致过拟合)
4、使用更大的训练数据
5、试着dart
四、处理过拟合
1、使用小型max_bin
2、使用小型num_leaves
3、使用min_data_in_leaf和min_sum_hessian_in_leaf
4、使用bagging_fraction和bagging_freq设置袋装
5、使用set feature_fraction进行特征子采样
6、使用更大的训练数据
7、尝试lambda_l1、lambda_l2和min_gain_to_split进行正则化
尝试max_depth以避免树长得太深