在数据并行中使用分散规约(Reducescatter)把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。基于投票的数据并行(ParallelVoting)则进一步优化数据并行中的通信代价,使通信代价变成常数级别。
特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。
LightGBM针对这两种并行方法都做了优化,
Cache命中率优化
基于直方图的稀疏特征优化
DART(Dropout + GBDT)
GOSS(Gradient-based One-Side Sampling):一种新的Bagging(row subsample)方法,前若干轮(1.0f /gbdtconfig->learning_rate)不Bagging;之后Bagging时, 采样一定比例g(梯度)大的样本。
4 stackingstacking的思想是将每个基模型的输出组合起来作为一个特征向量,重新进行训练。可以理解为:将训练好的所有基模型对整个训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。
具体算法如下(为方便理解我举例说明):
(1) 训练集大小\(400\times10\),400个样本,每个样本10个特征,(如果算上target有11列)。测试集大小为\(120\times10\)。
(2) 首先对训练集4折划分:\(S_1\),\(S_2\),\(S_3\),\(S_4\),每个\(S_i\)的大小都收是\(100\times10\)。模型\(M_1\)第一次用\(S_1\),\(S_2\),\(S_3\)训练,用\(S_4\)预测得到预测结果\(100\times1\)。重复训练步骤,直到每一个\(S_i\)都有对应的预测结果\(100\times1\)。合并所有预测结果得到\(P_1\)\(400\times1\)。用\(M_1\)预测得到原始测试集的预测结果\(T_1\)\(120\times1\)。
(3) 模型\(M_2\)用4折叫交叉得到训练集的预测结果:\(P_2\)\(400\times1\);得到测试集的预测结果:\(T_2\)\(120\times1\)。
(4) 模型\(M_3\)用4折叫交叉得到训练集的预测结果:\(P_3\)\(400\times1\);得到测试集的预测结果:\(T_3\)\(120\times1\)。
(5) 综合(2)(3)(4)底层模型得到的训练集的预测结果\(P_1\)、\(P_2\)、\(P_3\),得到上层模型的训练集\(P_{train}\)\(400\times3\);得到上层模型的测试集\(T_{test}\)\(120\times3\)。
(6) 用(5)得到的训练集和测试集进行上层模型的训练。
优点:学习了底层模型之间的关系
缺点:对于数据量要求比较大,因为要平衡第一层和第二层
5 参考《百面机器学习》
https://zhuanlan.zhihu.com/p/26890738
https://www.imooc.com/article/29530
https://blog.csdn.net/anshuai_aw1/article/details/83040541