【问题标题】:Saving and Loading lightgbm Dataset保存和加载 lightgbm 数据集
【发布时间】:2021-10-19 05:38:17
【问题描述】:

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

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

import numpy as 
import lightgbm as lgb

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

但到目前为止,我还无法重新加载数据集。有谁知道我应该如何在这里进行?

非常感谢!

【问题讨论】:

  • 如何您尝试加载数据集?请提供minimal reproducible example 并解释究竟是什么不起作用以及您期望它如何起作用。
  • 感谢您的意见。请阅读问题,我没有遇到您建议的问题,而只是询问是否有一种有效的方法来加载使用“save_binary”保存的 lightgbm 数据集(请参阅可重现的示例)。

标签: python load lightgbm


【解决方案1】:

简答

您可以通过将指向该文件的路径传递给lgb.Dataset()data 参数,从使用.save_binary() 创建的文件创建新数据集。

使用 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 保存到带有@987654334 的文件中@。

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

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

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2016-11-17
    相关资源
    最近更新 更多