XGBoost & LightGBM
目录
XGBoost & LightGBM¶
XGBoost 是一个强大且流行的梯度提升树库。对于更大的数据集或更快的训练,XGBoost 还提供分布式计算解决方案。LightGBM 是另一个与 XGBoost 类似的库;它也原生支持决策树的分布式训练。
Dask-ML 可以为您设置分布式 XGBoost 或 LightGBM,并从分布式 dask.dataframe 传递数据。这自动化了大部分预处理和设置的麻烦,同时仍让 XGBoost/LightGBM 发挥其优势。
下面,我们将参考一个 XGBoost 的示例。以下是相关的 XGBoost 类/函数
|
在 Dask 集群上训练 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 dataframe 的组成 Pandas dataframe 移动到 XGBoost,并让 XGBoost 进行训练。幸运的是,由于 XGBoost 具有出色的 Python 接口,这一切都可以在同一进程中发生,无需任何数据传输。这两个分布式服务可以在相同的数据上协同操作。
当 XGBoost 完成训练后,Dask 会清理 XGBoost 基础设施并正常继续。
这项工作是与 XGBoost 和 SKLearn 维护者合作完成的。相关 GitHub Issue 请参阅此处:dmlc/xgboost #2032
有关使用示例,请参阅“Dask-ML 示例”。