简答
您可以通过将指向该文件的路径传递给lgb.Dataset() 的data 参数,从使用.save_binary() 创建的文件创建新数据集。
使用 Python 3.7、numpy==1.21.0、scikit-learn==0.24.1 和 lightgbm==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 保存到带有@987654334 的文件中@。
当您想在内存中创建一个新的Dataset 对象时,您可以将文件路径传递给lgb.Dataset() 中的data 参数,如上面的示例代码所示。
注意:存储到磁盘的Dataset 对象不会包含您的原始数据。所以,在上面的示例代码中,dataset_from_file.data 是None。这样做是为了提高效率...一旦 LightGBM 创建了自己的“构建”训练数据表示,它就不再需要原始数据。