XGBoost & LightGBM

XGBoost & LightGBM

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

Dask-ML 可以为你设置分布式的 XGBoost 或 LightGBM,并从分布式的 dask.dataframes 中传递数据。这自动处理了大部分预处理和设置的麻烦,同时仍然让 XGBoost/LightGBM 做它们擅长的事情。

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

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 数据框的组成部分 Pandas 数据框移动到 XGBoost,并让 XGBoost 进行训练。幸运的是,由于 XGBoost 具有优秀的 Python 接口,所有这些都可以在同一个进程中发生,而无需任何数据传输。这两个分布式服务可以在相同的数据上协同工作。

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

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

请参阅“Dask-ML 示例”以获取示例用法。