在训练过程中,如果单机内存能放下所有样本,可以用多线程同时训练多棵树,树之间的训练互不影响。
三、随机森林算法原理
随机森林是由多个决策树构成的森林,算法分类结果由决策树的投票结果得到,其属于集成学习中的bagging方法。算法的主要原理如下:
- 假设为一棵决策树,其中每个决策树的抽样方式为重抽样,独立抽样次,每次随机抽取个样本,就可组成个训练集数据集,且它们是相互独立同分布的。
- 单棵决策树的生长原则遵循:每次从数据集的全部特征属性中随机选取个来训练,并比较评估效果。选择内节点的分裂属性中评估效果最好的属性进行分裂,并且遵循节点不纯度的原则。决策树由根节点遍历向下分裂。那么由一系列的决策树组合得到随机森林,其中是独立同分布的随机变量。
- 对于分裂后的2个或以上的子节点,继续进行分裂直到数据集S能够正确评估,或者属性全部用完。每棵决策树都不进行剪枝,使其充分生长。
- 所生成的棵决策树构成了随机森林。随机性表现在两个方面:每棵树训练集的抽取过程与节点分裂时的特征属性的选择过程。这样各棵树之间的相关性很低。对于新样本输入时,根据训练好的模型,每一棵树都会对其评估一个值,根据投票机制给出样本的类别标签或者根据均值法给出回归结果。
四、Spark ML 优化随机森林
在 Spark 平台上,传统单机形式的迭代方式必须要进行相应改进才能适用于分布式环境,这是因为在分布式环境下,数据也是分布式的,算法设计不得当会生成大量的 IO 操作,影响算法效率三个优化策略。
1.切分点抽样统计
在单机环境下的决策树对连续变量进行切分点选择时,一般是通过对特征点进行排序,然后取相邻两个数之间的点作为切分点,如果在分布式环境下如此操作的话,会带来大量的网络传输操作,特别是当数据量达到 PB 级时,算法效率将极为低下 Spark 中的随机森林在构建决策树时,会对各分区采用一定的子特征策略进行抽样, 然后生成各个分区的统计数据,并最终得到切分点。
2.切分特征装箱(Binning)
决策树的构建过程就是对特征的取值不断进行划分的过程对于离散的特征,如果有M
个值,最多个划分如果值是有序的