保存和加载 lightgbm 数据集

Saving and Loading lightgbm Dataset

我正在尝试使用 save_binary 命令保存和加载 lightgbm 数据集。

以下似乎适用于保存部分:

import numpy as 
import lightgbm as lgb

data = lgb.Dataset(np.array([[1,2],[12,2]]))
data.save_binary('test.bin')

但是到目前为止,我还没有能够将数据集加载回来。有谁知道我应该如何在这里进行?

非常感谢!

简答

您可以从使用 .save_binary() 创建的文件创建一个新的数据集,方法是将该文件的路径传递给 lgb.Dataset()data 参数。

用 Python 3.7、numpy==1.21.0scikit-learn==0.24.1lightgbm==3.2.1 试试这个例子。

import lightgbm as lgb
from numpy.testing import assert_equal
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)

# construct a Dataset from arrays in memory
dataset_in_mem = lgb.Dataset(
    data=X,
    label=y
)
dataset_in_mem.construct()

# save that dataset to a file
dataset_in_mem.save_binary('test.bin')

# create a new Dataset from that file
dataset_from_file = lgb.Dataset(data="test.bin")
dataset_from_file.construct()

# confirm that the Datasets are the same
print("--- X ---")
print(f"num rows: {X.shape[0]}")
print(f"num features: {X.shape[1]}")

print("--- in-memory dataset ---")
print(f"num rows: {dataset_in_mem.num_data()}")
print(f"num features: {dataset_in_mem.num_feature()}")

print("--- dataset from file ---")
print(f"num rows: {dataset_from_file.num_data()}")
print(f"num features: {dataset_from_file.num_feature()}")

# check that labels are the same
assert_equal(dataset_in_mem.label, y)
assert_equal(dataset_from_file.label, y)
--- X ---
num rows: 569
num features: 30
--- in-memory dataset ---
num rows: 569
num features: 30
--- dataset from file ---
num rows: 569
num features: 30

描述

LightGBM 训练需要对原始数据进行一些预处理,例如将连续特征分箱成直方图并丢弃不可拆分的特征。这种预处理在 LightGBM Dataset 对象的“构造”中完成一次。

在 Python 包 (lightgbm) 中,通常从内存中的数组创建 Dataset。如果你想多次重复使用 Dataset(例如,执行超参数调整)而不需要重复构建工作,你可以做一次,然后将 Dataset 保存到文件 .save_binary().

当你想在内存中创建一个新的Dataset对象时,你可以将文件路径传递给lgb.Dataset()中的data参数,如上面的示例代码所示。

注意:存储到磁盘的 Dataset 对象将不包括您的原始数据。所以,在上面的示例代码中,dataset_from_file.dataNone。这样做是为了提高效率……一旦 LightGBM 创建了自己的训练数据“构造”表示,它就不再需要原始数据了。