调整原因:项目要从有验证集的训练方式转变为无验证集的训练方式。
问题:有验证集的训练方式可以通过验证集earlystop来控制训练的过拟合问题,换成无验证集的训练方式后,无法继续通过使用earlystop这种方式来减少过拟合了,需要增强其他的正则。
项目使用工具包:LightGBM,树模型为GBDT
相关的原理这里不做过多的介绍,上面的文档以及网络上资源很多,这里主要涉及参数调整实录。
官方文档给的建议:
lightgbm的参数有很多:
可以针对性的看一下
可以看到参数有好几个可供调整,但针对不同的树,调整的参数不一样。
这里是调节GBDT树,选的参数有三个:
三个参数分别控制L2正则,一个叶子中数据最少量,随机采样(相当于剪枝)
1.lambda_l2
lambda_value | train(auc) | valid(auc) |
---|---|---|
Early stop 0.0 | 0.7375 | 0.6544 |
0.1 | 0.742 | 0.6540 |
0.2 | 0.7249 | 0.6544 |
0.3 | 0.7653 | 0.6557 |
0.4 | 0.7883 | 0.6586 |
0.5 | 0.764 | 0.6566 |
0.35 | 0.7517 | 0.6565 |
0.38 | 0.7914 | 0.6561 |
2.min_data_in_leaf
min_data_in_leaf value | train | valid |
---|---|---|
early stop 20 | 0.7375 | 0.6544 |
200 | 0.77433 | 0.6592 |
500 | 0.7694 | 0.6628 |
1000 | 0.76372 | 0.6646 |
2000 | 0.75665 | 0.6622 |
3000 | 0.7564 | 0.66335 |
20000 | 0.7482 | 0.661 |
3.bagging_fraction
bagging_fraction value | train | valid |
---|---|---|
early stop 1.0 | 0.7375 | 0.6544 |
0.9 | 0.7375 | 0.6544 |
0.8 | 0.7375 | 0.6544 |
从上述实验中可以看到,lambda_l2和min_data_in_leaf有效果,而bagging_fraction无效果
合起来实验
lambda value, min data in leaf | train | test |
---|---|---|
0.1,1000 | 0.7677 | 0.661708 |
0.1,500 | 0.772 | 0.662445 |
0.1, 200 | 0.776361 | 0.6585 |
0.4,200 | 0.7755 | 0.656514 |
0.4,500 | 0.7723 | 0.66195 |
0.4, 1000 | 0.7679 | 0.66207 |
最终选定参数为lambda_l2=0.1
和min_data_in_leaf=500
。