如何解决dask_lightgbm使用的完整训练集?
我正在阅读dask-lightgbm估计器的实现(特别是dask_lightgb.core.py中的_train_part
函数),但看不到训练集的整体情况习惯于适合最终的估算器?
_train_part
函数接受布尔参数return_model
,并且在train
函数的实现中(使用client.submit
在每个工作程序上调用_train_part
),return_model
仅在工作人员为“ master_worker”(其本身似乎是随机选择的dask工作人员)时才为true。从逻辑上讲,每个工作人员都被分配了整个模型训练集的1 / n块-其中n =工人总数-然后,每个工人在训练集的自己子集上训练自己的独立模型。 return_model
参数控制_train_part
是否返回每个工作人员的模型,因此,除一个工作人员外,它对所有工作人员-因此所有模型都返回None。
代码:
def _train_part(params,model_factory,list_of_parts,worker_addresses,return_model,local_listen_port=12400,time_out=120,**kwargs):
network_params = build_network_params(worker_addresses,get_worker().address,local_listen_port,time_out)
params.update(network_params)
# Concatenate many parts into one
parts = tuple(zip(*list_of_parts))
data = concat(parts[0])
label = concat(parts[1])
weight = concat(parts[2]) if len(parts) == 3 else None
try:
model = model_factory(**params)
model.fit(data,label,sample_weight=weight)
finally:
_safe_call(_LIB.LGBM_NetworkFree())
return model if return_model else None
这是否等同于在训练集的1 / n子样本上训练lightgbm估计器的非分布式版本?我想念什么吗?我感觉好像缺少了一部分,要么将工人的独立模型合并为一个模型,要么将单个估算器更新为由单独的工人学习的单个树。
谢谢!
解决方法
答案是肯定的-dask_lightgbm使用所有可用的训练样本。 Dask的职责仅是在工作人员之间分发数据。一旦设置了network parameters,LightGBM便会处理所有分布式学习。并不是每个工人都在训练自己的独立模型-LightGBM只是在训练一个模型-但是每个工人都会得到它的副本。因此,只有选定的工作人员返回拟合的估计量,其他所有人都返回无。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。