最近在参加一些数据竞赛,诸如腾讯校园算法大赛和蚂蚁金服风险识别大赛,在参赛的过程中,发现原生的LightGBM比sklearn接口的LIghtGBM方便的不要太多。因此,趁此之际,总结一波。
数据接口
加载numpy
数组到Dataset
中:
|
|
加载libsvm文本文件或者LightGBM二进制文件到Dataset中:
|
|
- 保存Dataset到LightGBM二进制文件将会使得加载更快速12train_data = lgb.Dataset(data, label=label)train_data.save_binary('train.bin')
指定feature names
(分类名称)和categorical features
(分类特征):
|
|
LightGBM可以直接使用categorical features
作为输入,它不需要被转换为one-hot encoding(独热编码),并且它比one-hot更快。
内存的高使用:
LightGBM中的Dataset
对象由于只需要保存discrete bins(离散的数据块),因此,它具有很好的内存效率。然而,Numpy/Array/Pandas对象的内存开销较大,如果更关心内存消耗的时候,可以根据以下方式来节省内存:
- 在构造
Dataset
时设置free_raw_data=True
(默认为True) - 在
Dataset
被构造完之后手动设置raw_data=None
- 调用
gc
验证集的产生
在LightGBM中,验证集的生成必须依赖于训练集,可用如下语句生成验证集:
|
|
设置参数
LightGBM可以使用一个pair的list或一个字典来设置参数,例如:
- 可以指定多个eval指标1param['metric'] = ['auc', 'binary_logloss']
训练
训练一个模型时,需要一个parameter list(参数列表)和dataset(数据集):
1234# 迭代次数num_round = 10# valid_sets中包含训练集和验证集 即可看到过拟合现象bst = lgb.train(param, train_data, num_round, valid_sets=[train_data, test_data])在训练完成后,可以使用如下方式来保存模型:
1bst.save_model('model.txt')已保存模型也可以使用如下方式来加载
1bst = lgb.Booster(model_file='model.txt')
交叉验证
使用5-折方式的交叉验证来进行训练(4个训练集,1个测试集):
|
|
早停策略
如果含有验证集,则可以使用早停策略来找到最佳参数的boosting rounds(梯度次数)。提前停止需要在valid_sets
中至少有一个集合,如果有多个,它们都会被使用:
该模型将开始训练,直到验证得分停止提高为止。
预测
已经训练或加载的模型都可以对数据集进行预测:
如果在训练过程中启用了提前停止,可以用bst.best_iteration
从最佳迭代中获得预测结果: