lightgbm 中的数据集、助推器、cvbooster、序列有什么区别?
What is the difference between dataset, booster, cvbooster, sequence in lightgbm?
我对 lightgbm 中的这些数据结构有点困惑 API。我的理解是:
- lgb.dataset 是从 pandas 等加载数据的常见用法
- lgb.booster是加载一个你之前训练过的模型? (不确定)
- lgb.cvbooster 与 lgb.booster 相同,除了一些细节? (不确定)
- 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
构建期间超出可用内存时,应使用此对象。
我对 lightgbm 中的这些数据结构有点困惑 API。我的理解是:
- lgb.dataset 是从 pandas 等加载数据的常见用法
- lgb.booster是加载一个你之前训练过的模型? (不确定)
- lgb.cvbooster 与 lgb.booster 相同,除了一些细节? (不确定)
- 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 文件。
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
构建期间超出可用内存时,应使用此对象。