lightgbm中的数据集(dataset)、增强器(booster)、交叉验证增强器(cvbooster)、序列(sequence)之间有什么区别?

4
我对lightgbm中这些数据结构的API有些困惑。我的理解如下:
  1. lgb.dataset是常用的从pandas等加载数据的方法。
  2. lgb.booster是用于加载您之前训练的模型?(不确定)
  3. lgb.cvbooster与lgb.booster相同,除了一些细节?(不确定)
  4. lgb.sequence是类似DNN中使用的一维数据集吗?(不确定)
有人能澄清一下吗?
1个回答

4

概述

LightGBM模型训练始于将原始数据转换为Dataset。要逐步构建这样的对象,您需要请求LightGBM迭代由Sequence提供的数据块。

训练将生成一个称为Booster的模型对象。该对象可以以文本或二进制形式保存,并且其predict()方法可用于对新数据进行预测。

LightGBM的R和Python包都包含一个名为lgb.cv()的函数,它执行k倍交叉验证。此功能生成一个CVBooster,其中包含一个Booster对象列表(每个折叠一个)。

更多详情

Dataset

在训练之前,LightGBM会进行一次性的预处理,例如将连续特征分桶成直方图并删除无法拆分的特征。有关详细信息,请参见此答案

Dataset类管理该预处理。例如,在lightgbm Python包中,您可以使用lgb.Dataset()numpy数组、scipy稀疏数组、pandas DataFrame或CSV/TSV文件创建一个这些对象。

Python包中的lgb.train()期望传递其中的一个对象。在scikit-learn API中的类期望传递原始数据,如numpy数组,并为您内部创建Dataset

Booster

"LightGBM"中的"B"代表"Boosting"。 Booster类是LightGBM的核心模型对象。它保存模型的当前状态,并具有执行诸如继续训练过程(.update())、在新数据上进行预测(.predict())等操作的方法。

使用Python包训练模型时,可以使用lgb.train()生成这些Booster对象。如果使用scikit-learn API,则生成的模型对象将包含一个Booster

CVBooster

CVBooster类不在LightGBM C/C++核心库中存在。它是特定于包装器软件,例如R和Python包的。

CVBooster中的"CV"表示“交叉验证”。它是由LightGBM Python和R包中的交叉验证函数lgb.cv()产生的对象。

CVBooster包含一个属性.boosters,它是Booster对象的列表(每个fold对应一个)。

Sequence

自LightGBM 3.3.0起,Sequence对象是新的,并且截至该版本仅支持Python包。

Sequence对象是一个Python类,允许LightGBM迭代原始数据块以逐步构建Dataset对象。

当您的原始数据已经分成文件(例如收集的HDF5文件)或者您担心在Dataset构建期间超出可用内存时,应使用此对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接