策略二:使用[[]]类型来缓存当前样本隶属于每棵树的哪个节点(例如训练棵树,则创建长度为的数组,每一个元素记录了此条样本在对应下标的树模型中的叶节点编号)从源代码中我们发现,策略二每一轮迭代都会卸载上一轮持久化的,再创建一个本棵树的森林举例,每一轮迭代就是亿个长度为的数组的创建与垃圾回收
实际测试中我们也发 科威特手机号码列表 现策略二的效率不如方案一高那么策略一又如何呢?F在每一轮迭代中能够训练的最大节点数由x控制,我们希望通过增大这个参数来减少迭代次数但随着树或树深的增加,往往陷入增大该参数就导致树模型广播到w溢出的尴尬境地经过对F源码分析,我们发现每个都会存储当前节点、左子节点、右子节点的直方图,最终实现在一套通用框架下计算出每个节点的增益、纯度、预测值等等属性,但这导致了倍的内存占用

考虑到因果森林原则,叶节点值的计算使用,因此生长过程中每个节点全都带着w的直方图是完全没有意义的因此我们优化了树的生长逻辑,每个节点仅保留自身的直方图,对于已分裂的节点则清除直方图以二叉满树为例,叶节点约占整棵树节点的,结合直方图从倍冗余到倍存储,这一优化使树模型直方图的内存占用下降到原本的6,极大降低了模型体积
|