将数据加载到 Catboost Pool 对象中
Loading data into Catboost Pool object
我正在训练 Catboost 模型并使用 Pool 对象如下:
pool = Pool(data=x_train, label=y_train, cat_features=cat_cols)
eval_set = Pool(data=x_validation, label=y_validation['Label'], cat_features=cat_cols)
model.fit(pool, early_stopping_rounds=EARLY_STOPPING_ROUNDS, eval_set=eval_set)
对于x_train
、y_train
、x_validation
和y_validation
,它们来自Pandas DataFrame
类型(数据集保存为Parquet文件,我使用 PyArrow 将它们读入数据帧)。
model
是 Catboost classifier/regressor。
我正在尝试针对大型数据集进行优化,我的问题是:
- 当将数据集读取到 Pandas DataFrame(使用 PyArrow),然后创建 Pool 对象时,我实际上是否将用于存储数据集的内存量加倍了?我知道他们复制数据来构造池,这不是参考。
- 有没有更有效的创建池的方法?例如直接从
libsvm
文件加载它?喜欢在这里提到 https://catboost.ai/docs/concepts/python-usages-examples.html#load-the-dataset-from-a-file
- 有什么办法可以批量加载数据到Pool中吗?而不是一开始就将所有内容都加载到内存中?
- 是的,不幸的是,使用的 RAM 量增加了一倍,因此最好先将数据转换为 Catboost 可以理解的文件格式,然后再从文件创建池。为什么 Catboost 使用额外的 RAM - 来量化数据集。你可以从大 Pandas 数据帧(必须加载到 RAM)中准备一个池,删除 df,量化池,如果你认为以后必须重复训练,请保存它。请注意,您只能保存量化池。如果这样做,一定要说量化边界,否则,您将无法创建辅助数据集(如验证数据集),因为它们需要相同的量化。 csv/tsv Catboost 等简单文件格式可以直接从磁盘读取(并量化,它们在 untils 模块中有辅助函数)。
- 是的,和你引用的一模一样。
- 您可以使用 batch training or go with training continuation 手动加载批次。两者都会为您的目的工作,我已经尝试过了。训练延续看起来更简单(因为你只需要提供 init_model),但你将无法在 GPU 上训练(至少目前是这样)。另外,您将仅限于对称树,并且对超参数有更多限制。通过批量训练,您可以使用 GPU。
我正在训练 Catboost 模型并使用 Pool 对象如下:
pool = Pool(data=x_train, label=y_train, cat_features=cat_cols)
eval_set = Pool(data=x_validation, label=y_validation['Label'], cat_features=cat_cols)
model.fit(pool, early_stopping_rounds=EARLY_STOPPING_ROUNDS, eval_set=eval_set)
对于x_train
、y_train
、x_validation
和y_validation
,它们来自Pandas DataFrame
类型(数据集保存为Parquet文件,我使用 PyArrow 将它们读入数据帧)。
model
是 Catboost classifier/regressor。
我正在尝试针对大型数据集进行优化,我的问题是:
- 当将数据集读取到 Pandas DataFrame(使用 PyArrow),然后创建 Pool 对象时,我实际上是否将用于存储数据集的内存量加倍了?我知道他们复制数据来构造池,这不是参考。
- 有没有更有效的创建池的方法?例如直接从
libsvm
文件加载它?喜欢在这里提到 https://catboost.ai/docs/concepts/python-usages-examples.html#load-the-dataset-from-a-file - 有什么办法可以批量加载数据到Pool中吗?而不是一开始就将所有内容都加载到内存中?
- 是的,不幸的是,使用的 RAM 量增加了一倍,因此最好先将数据转换为 Catboost 可以理解的文件格式,然后再从文件创建池。为什么 Catboost 使用额外的 RAM - 来量化数据集。你可以从大 Pandas 数据帧(必须加载到 RAM)中准备一个池,删除 df,量化池,如果你认为以后必须重复训练,请保存它。请注意,您只能保存量化池。如果这样做,一定要说量化边界,否则,您将无法创建辅助数据集(如验证数据集),因为它们需要相同的量化。 csv/tsv Catboost 等简单文件格式可以直接从磁盘读取(并量化,它们在 untils 模块中有辅助函数)。
- 是的,和你引用的一模一样。
- 您可以使用 batch training or go with training continuation 手动加载批次。两者都会为您的目的工作,我已经尝试过了。训练延续看起来更简单(因为你只需要提供 init_model),但你将无法在 GPU 上训练(至少目前是这样)。另外,您将仅限于对称树,并且对超参数有更多限制。通过批量训练,您可以使用 GPU。