从官方文档弄懂Lightgbm(Python版本快速入门)

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对象的内存开销很大。如果您担心内存消耗,可以通过以下方式节省内存:

  1. 在构造数据集时设置 free_raw_data=True(默认值为True)
  2. 在构造数据集后显式设置 raw_data=None
  3. 调用 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)

猜你喜欢

转载自blog.csdn.net/qq_40860934/article/details/112172113