保存和加载 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.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
保存到文件 .save_binary()
.
当你想在内存中创建一个新的Dataset
对象时,你可以将文件路径传递给lgb.Dataset()
中的data
参数,如上面的示例代码所示。
注意:存储到磁盘的 Dataset
对象将不包括您的原始数据。所以,在上面的示例代码中,dataset_from_file.data
是 None
。这样做是为了提高效率……一旦 LightGBM 创建了自己的训练数据“构造”表示,它就不再需要原始数据了。
我正在尝试使用 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.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
保存到文件 .save_binary()
.
当你想在内存中创建一个新的Dataset
对象时,你可以将文件路径传递给lgb.Dataset()
中的data
参数,如上面的示例代码所示。
注意:存储到磁盘的 Dataset
对象将不包括您的原始数据。所以,在上面的示例代码中,dataset_from_file.data
是 None
。这样做是为了提高效率……一旦 LightGBM 创建了自己的训练数据“构造”表示,它就不再需要原始数据了。