lightgbm 中的数据集、助推器、cvbooster、序列有什么区别?

What is the difference between dataset, booster, cvbooster, sequence in lightgbm?

我对 lightgbm 中的这些数据结构有点困惑 API。我的理解是:

  1. lgb.dataset 是从 pandas 等加载数据的常见用法
  2. lgb.booster是加载一个你之前训练过的模型? (不确定)
  3. lgb.cvbooster 与 lgb.booster 相同,除了一些细节? (不确定)
  4. lgb.sequence 是像 DNN 中使用的那样的一维数据集吗? (不确定)

有人可以澄清一下吗?

总结

LightGBM 模型训练从将原始数据转换为 Dataset 开始。要逐步构建这样的对象,您要求 LightGBM 迭代 Sequence.

提供的数据块

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

LightGBM 的 R 和 Python 包包含一个执行 k 折交叉验证的函数 lgb.cv()。此函数生成一个 CVBooster,一个包含 Booster 个对象列表(每折一个)的对象。

更多详情

数据集

在训练之前,LightGBM 会做一些一次性的预处理,比如将连续的特征分桶成直方图并丢弃不可分割的特征。有关更详细的说明,请参阅 this answer

Dataset class 管理预处理。例如,在 lightgbm Python 包中,您可以使用 lgb.Dataset()numpy 数组、scipy 备用数组、pandas DataFrame,或CSV/TSV 文件。

Python 包中的

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

助推器

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

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

CV助推器

核心 LightGBM C/C++ 库中不存在 CVBooster class。它特定于包装程序包,如 R 和 Python 包。

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

CVBooster 包含一个属性 .boosters,它是 Booster 个对象的列表(来自 k 折交叉验证的每个折)。

序列

Sequence 对象是 LightGBM 3.3.0 中的新对象,并且在该版本中仅在 Python 包中受支持。

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

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