前面提到了,LightGBM是Xgboost的更高效实现, 由微软发布。
XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
LightGBM相比于Xgboost,添加了很多新的方法来改进模型,包括:并行方案、基于梯度的单边检测(GOSS)、排他性特征捆绑等。
LightGBM的设计思路主要是两点:1.减小数据对内存的使用,保证单个机器在不牺牲速度的情况下,尽可能地用上更多的数据;2.减小通信的代价,提升多机并行时的效率,实现在计算上的线性加速。由此可见,LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
LightGBM并没有垂直的切分数据集,而是每个worker都有全量的训练数据,因此最优的特征分裂结果不需要传输到其他worker中,只需要将最优特征以及分裂点告诉其他worker,worker随后本地自己进行处理。处理过程如下:
每个worker在基于局部的特征集合找到最优分裂特征。
workder间传输最优分裂信息,并得到全局最优分裂信息。
每个worker基于全局最优分裂信息,在本地进行数据分裂,生成决策树。
在AdaBoost中,采样权重作为数据实例