我正在训练 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
,它们来自类型(数据集保存为 Parquet 文件,我使用 PyArrow 将它们读入数据帧)。
是 Catboost 分类器/回归器。x_validation
y_validation
Pandas DataFrame
model
我正在尝试针对大型数据集进行优化,我的问题是:
- 将数据集读取到 Pandas DataFrame(使用 PyArrow),然后创建 Pool 对象时,我实际上是否将用于存储数据集的内存量翻了一番?我知道他们复制数据来构建池,它不是参考。
- 有没有更有效的方法来创建池?例如直接从
libsvm
文件加载它?就像这里提到的https://catboost.ai/docs/concepts/python-usages-examples.html#load-the-dataset-from-a-file - 有什么办法可以将数据批量加载到池中?而不是一开始就将所有内容都加载到内存中?