正文
接下来进入第二阶段任务二的实验中来。
要想在之前实验的基础上再有提升有以下几个方向:
- 继续特征工程加入新特征,通过不断过拟合得到特征重要性的数据,然后筛选保留重要特征,剔除无用特征且保持auc不变。
- 参数调优,不过这个方法能力有限,只能小范围优化,无法得到质的飞跃。
- 换用其它算法进行训练,并进行模型融合。
我接下来首先准备尝试的是模型融合,这个是最能立竿见影的。通过百度查阅资料,我准备选用LightGBM
作为新的算法进行训练,该算法是在之前XGBoost
的基础上进行优化得来的,至于会好多少还是只有试了才知道。
训练
中文文档:LightGBM 中文文档
参考这篇博客进行代码实现:【集成学习】lightgbm使用案例
由于之前特征工程已经做好了,直接拿过来训练就行,所以实现还是很快的。
1 | # -*- coding:utf-8 -*- |
没想到这个算法的训练速度贼快,不到半分钟就结束了,一共训练了102轮就提前结束,由于模型参数都是直接抄过来的还没调优,本以为提交结果会很差,结果没想到有0.7711分,使用XGB
可是得训练半个小时才有这个成绩,看来LightGBM
的优越确实名不虚传。
调优
接下来进行参数调优,看看单模型上限是多少。
参考博客:LightGBM 调参方法(具体操作)
训练轮数n_estimators调优
1 | # -*- coding:utf-8 -*- |
首先把学习率设高一点0.1
,得到一个最佳训练轮数:
1 | best n_estimators: 340 |
接下来把这个数据带到后面的调优中使用。
max_depth 和 num_leaves调优
1 | # max_depth 和 num_leaves调优 |
1 |
|
线上得分上升到0.7731
min_data_in_leaf(min_child_samples) 和 min_sum_hessian_in_leaf(min_child_weight) 调优
1 | params_test3 = {'min_child_samples': [18, 19, 20, 21, 22], 'min_child_weight': [0.001, 0.002] |
1 |
|
feature_fraction 和 bagging_fraction 调优
1 | params_test4 = {'feature_fraction': [0.5, 0.6, 0.7, 0.8, 0.9], 'bagging_fraction': [0.6, 0.7, 0.8, 0.9, 1.0] |
1 |
|
1 | params_test5={ 'feature_fraction': [0.62, 0.65, 0.68, 0.7, 0.72, 0.75, 0.78 ] |
1 |
|
正则化参数
1 | params_test6 = {'reg_alpha': [0, 0.001, 0.01, 0.03, 0.08, 0.3, 0.5], |
1 |
|
经过漫长的调参,最后的结果并不理想,线上得分最高只有0.7703
模型融合
接下来尝试模型融合,将两种模型最好的预测数据通过循环以0.1为步长尝试各种比例线性加权融合以后,提交得出最好成绩为0.7770,融合比例为 XGBoost x 0.5 + LightGBM x 0.5平均混合。
2020.2.11更新
今天早上起来看代码,突然发现自己傻逼了,之前直接抄的别人的代码过来用,结果发现他用的目标函数是regression
,而我要做的是二分类binary
。更换目标函数后再进行训练,单模型得分直接0.7772,但是进行模型融合以后最高只有0.7753。
都说学习率越低越好,我反而越低学出来越差,就把学习率调高了,结果效果还更好:0.7824。以XGBoost x 0.2 + LightGBM x 0.8融合后最高得分为0.7863。
1 | params = { |