1 安装
通过 pip 安装
pip install lightgbm # cpu
pip install lightgbm --install-option=--gpu # gpu
验证:
import lightgbm as lgb
2 数据接口
可以从以下地方加载数据:
- LibSVM / TSV / CSV / TXT 格式文件
- NumPy 2D 数组、pandas DataFrame、H2O DataTable’s Frame、SciPy 稀疏矩阵
- LightGBM 二进制文件
数据存储在一个 Dataset 对象中。
将 LibSVM 文本文件或 LightGBM 二进制文件加载到 Dataset 中
train_data = lgb.Dataset('train.svm.bin')
加载 numpy array 到 Dataset
data = np.random.rand(500, 10)
label = np.random.randint(2, size=500)
train_data = lgb.Dataset(data, label=label) #数据和标签
将 scipy.sparse.csr_matrix 加载到 Dataset
import scipy
csr = scipy.sparse.csr_matrix((dat, (row, col)))
train_data = lgb.Dataset(csr)
将 Dataset 保存为 LightGBM 二进制文件会使加载速度更快
train_data = lgb.Dataset('train.svm.txt')
train_data.save_binary('train.bin')
创建验证集
validation_data = lgb.Dataset('validation.svm', reference=train_data)
在 LightGBM 中,验证数据应该与训练数据保持一致。
指定特征名和类别特征
train_data = lgb.Dataset(data, label=label, feature_name=['c1', 'c2', 'c3'], categorical_feature=['c3'])
还可以设置权重
w = np.random.rand(500, )
train_data = lgb.Dataset(data, label=label, weight=w)
可以使用 Dataset.set_init_core()
来设置初始分数,使用 Dataset.set_group()
来为排序任务设置组/查询数据。
更有效的使用:
LightGBM 中的 DataSet 对象非常节省内存,它只需要保存离散的存储箱。但是 Numpy/Array/Pandas对象的内存开销很大。如果您担心内存消耗,可以通过以下方式节省内存:
- 在构造数据集时设置
free_raw_data=True
(默认值为True) - 在构造数据集后显式设置
raw_data=None
- 调用 gc
3 设置参数
更多参数设置
- Booster 参数
param = {
'num_leaves': 31, 'objective': 'binary'}
param['metric'] = 'auc'
- 多个评价指标
param['metric'] = ['auc', 'binary_logloss']
4 训练
训练模型需要参数列表和数据集
num_round = 10
bst = lgb.train(param, train_data, num_round, valid_sets=[validation_data])
训练之后,可以保存模型:
bst.save_model('model.txt')
训练好的模型也可以转储为JSON格式:
json_model = bst.dump_model()
然后加载保存好的模型:
bst = lgb.Booster(model_file='model.txt') # init model
Early Stopping
如果有验证集,则可以使用提前停止来查找最佳的提升轮数。提前停止要求 valid_sets
中至少有一个集合。如果有多个,它将使用除训练数据之外的所有数据:
bst = lgb.train(param, train_data, num_round, valid_sets=valid_sets, early_stopping_rounds=5)
bst.save_model('model.txt', num_iteration=bst.best_iteration)
模型进行训练,直到验证分数停止提高。验证分数至少需要在每个 early_stopping_rounds
提高才能继续训练。
如果通过设置 early_stopping_rounds
启用了提前停止,则具有最佳性能的迭代索引将保存在best_Iteration
字段中。请注意,train()
将返回最佳迭代中的模型。
5 CV
5 折交叉验证的训练
lgb.cv(param, train_data, num_round, nfold=5)
6 预测
经过训练或加载的模型可以在数据集上执行预测:
# 7 entities, each contains 10 features
data = np.random.rand(7, 10)
ypred = bst.predict(data)
如果在训练期间启用了提前停止,那么可以使用 bst.best _ iteration
从最好的迭代中获得预测:
ypred = bst.predict(data, num_iteration=bst.best_iteration)