XGBoost & LightGBM

XGBoost & LightGBM

XGBoost 是一个强大且流行的梯度提升树库。对于更大的数据集或更快的训练,XGBoost 还提供分布式计算解决方案。LightGBM 是另一个与 XGBoost 类似的库;它也原生支持决策树的分布式训练。

Dask-ML 可以为您设置分布式 XGBoost 或 LightGBM,并从分布式 dask.dataframe 传递数据。这自动化了大部分预处理和设置的麻烦,同时仍让 XGBoost/LightGBM 发挥其优势。

下面,我们将参考一个 XGBoost 的示例。以下是相关的 XGBoost 类/函数

train(client, params, data, labels[, ...])

在 Dask 集群上训练 XGBoost 模型

predict(client, model, data)

使用 XGBoost 进行分布式预测

XGBClassifier(*[, objective])

属性

XGBRegressor(*[, objective])

属性

LightGBM 的实现可在 https://github.com/microsoft/LightGBM 找到,文档可在 https://lightgbm.readthedocs.io/en/latest/Parallel-Learning-Guide.html#dask 找到。

示例

from dask.distributed import Client
client = Client('scheduler-address:8786')

import dask.dataframe as dd
df = dd.read_parquet('s3://...')

# Split into training and testing data
train, test = df.random_split([0.8, 0.2])

# Separate labels from data
train_labels = train.x > 0
test_labels = test.x > 0

del train['x']  # remove informative column from data
del test['x']  # remove informative column from data

# from xgboost import XGBRegressor  # change import
from dask_ml.xgboost import XGBRegressor

est = XGBRegressor(...)
est.fit(train, train_labels)

prediction = est.predict(test)

工作原理

Dask 在 Dask 调度器上设置 XGBoost 的主进程,并在 Dask 工作进程上设置 XGBoost 的工作进程。然后,它将所有 Dask dataframe 的组成 Pandas dataframe 移动到 XGBoost,并让 XGBoost 进行训练。幸运的是,由于 XGBoost 具有出色的 Python 接口,这一切都可以在同一进程中发生,无需任何数据传输。这两个分布式服务可以在相同的数据上协同操作。

当 XGBoost 完成训练后,Dask 会清理 XGBoost 基础设施并正常继续。

这项工作是与 XGBoost 和 SKLearn 维护者合作完成的。相关 GitHub Issue 请参阅此处:dmlc/xgboost #2032

有关使用示例,请参阅“Dask-ML 示例”。