RandomForest vs ExtraTrees:你应该在实际项目中选择哪一个?
数据分析的开源库对于数据科学家有效开发原型解决方案是必不可少的。在这些库中,scikit-learn是一个很好的选择,并且基于树的算法因其高效率和准确性而受到青睐。
我想谈谈RandomForest和ExtraTrees,这是世界各地数据科学家使用的最着名的基于集成决策树的算法。两种算法都从原始数据集中随机选择一个子集,并使用随机子空间方法为每个基础学习者选择一个特征子集。因为每个基础学习者都是独立训练的数据,所以两种算法都可以并行实现,具有很高的时间效率。那么它们之间有什么区别呢?根据手头的数据集,应该使用哪一个来训练具有更高泛化精度的模型?
本文的主要目的是弄清楚每种算法的优缺点,了解它们之间的差异,以及如何为数据集选择它们。我将使用回归问题示例进行解释。
工厂的能源预测
问题描述: 能源预测是工业机器学习应用中的流行问题。假设您从客户那里得到一个项目,以预测下一个小时每小时一次的电力需求,例如,2点钟预测3点钟的电力需求,在15点预测16点的需求......等等。训练数据是时间序列的集合,其中包括电力需求,以及一些制造特征,如所有机器的工作时间,工厂的湿度和温度,所有机器的工作量计划等。因为电力需求是与制造业紧密相关的客户要求,不仅需要过去时间序列的电力需求,还要在模型训练过程中积极参考制造特征。
数据的格式
如上表所示,预测的 target energy是cold water。其他列,从work time到plan num,都是用来预测 target energy的特性。由于数据也是包含特征和目标的9个维度的时间序列,了解过去的能源成本和其他制造数据有助于预测未来的能源成本。所以你决定用过去3小时的所有数据(包括 target energy)来预测下一个小时的能量。例如,11,12,13 点的数据被用来预测14点的cold water。在这个设置中,特征和目标的维度分别是27和1。
您获得了2017年全年的训练数据,安排成良好的格式,并准备就绪,以leave - one - out方式进行训练和测试。你选择了你最喜欢的基于树的集成算法RandomForest,因为它在大多数任务中都表现出了很高的性能,输入训练数据,点击开始按钮,……
不等待太久,您得到了所学习模型的预测精度和特征重要性的测试结果:
随机森林模型的预测精度。精度分为夜间精度和日间精度两部分,两者都越高越好。
随机森林模型的特征重要性。特征名后跟-1~3来标记过去1~3小时的数据
预测精度接近95%以上,对于大多数预测任务都是足够的。然而,特征的重要性很大程度上偏向cold water-1 (超过0.9),也就是最后一小时的cold water。在cold water-2中只有一小部分的重要性(超过0.1),而其他特征则不太重要。
在解释这种现象发生的原因之前,我将首先介绍基础学习者的一些基本知识,决策树。
iris训练数据的决策树分区
决策树是将数据集按照一定的分割方法分割成叶子节点的分割算法,使每个叶子节点的子数据集尽可能的纯净。理解节点如何分割是理解决策树中使用的每个特性的重要性的关键,也是理解其集成算法(如RandomForest和ExtraTrees)的关键。这里,我使用iris数据集作为示例来解释决策树分类器中的节点分割。
iris数据集有4个特征列(萼片长度、萼片宽度、花瓣长度和花瓣宽度)和1个目标类列。在决策树算法的初始阶段,将整个数据集输入到根节点,计算节点的Gini杂质。Gini杂质是测量数据集的杂质的指标之一,CART算法用于分类树。在回归树中,使用mse或mae。然后,将所有特征列按元素进行循环,找到在将根节点分割为两个子节点后,能最大程度降低杂质的最佳分割点。在本例中,分割点位于特征花瓣长度为2.45的地方。分割过程重复进行,直到满足一些停止条件。标准可以定义为树的根、节点中所需的最小样本数等。
训练完成后,将原始数据集分解为树模型的叶节点样本,如图所示。从根到叶的每一条路径都被视为原始数据空间的空间分裂。在预测过程中,根据树的分裂规律,测试样本从根节点流向某个叶节点。预测值就是叶节点中所有样本的均值。
观察预测的另一种观点是,对于高维空间中的任意点,首先将点划分为一个局部空间,在该空间中,该局部空间的函数值由决策树对应的叶节点采样,并将平均值用于预测。局部空间越聚集,预测越准确。然而,这也是为什么当叶节点过度聚合时,决策树容易过度拟合的原因。例如,在叶子节点中只存在一个示例。因此,精确地调整停止条件是决策树模型在偏差和方差之间进行权衡的关键。
在对决策树进行分析之后,您可以发现训练的决策树模型的特征重要性与特征和目标之间的相关性密切相关。因为分裂点很可能来自与目标具有高相关性的特征,所以它们很难来自与目标具有低相关性的特征。相关性越高,特征重要性越高。这种现象也适用于RandomForest,其中计算最佳分裂点,即使在训练期间仅使用随机选择的子集。这就是为什么特征重要性在上图中严重偏向cold water-1的原因,因为目标cold water的最高相关特征是1小时前的cold water本身。
为了解决这个问题,您需要一个算法来利用所有的特性,无论它们与目标的相关性是高是低。这正是ExtraTrees所做的。ExtraTrees类似于RandomForest作为决策树的集合算法。但是,它们在以下几点有所不同:
- ·ExtraTrees从特征列中随机选择分裂点,而不是将最优的分割点计算为RandomForest。
- ·ExtraTrees不使用训练样本的bootstrap副本作为RandomForest。
因此,ExtraTrees可以利用不相关的功能以及相关功能,并且计算成本较低。以下是ExtraTrees的预测准确性和特征重要性。
ExtraTrees模型的预测精度。精度分为两部分:夜间精度和日间精度,越高越好
ExtraTrees模型的特征重要性。特征名后跟-1~3来标记过去1~3小时的数据
您可以看到ExtraTrees的预测准确性与RandomForest一样好,甚至在某些地方也更好。然而,特征重要性在很大程度上是不同的,其中cold water-1的重要性仅为0.35左右,其余特征共享其余的重要性。
最后,ExtraTrees模型满足客户要求,具有良好的准确性。从统计角度来看,利用不相关的特征可以帮助减少方差,同时增加训练模型的偏差。如果为分裂点选择了太多不相关(噪声)特征,则偏差和方差都会过高,这也是ExtraTrees的弱点。