运行随机森林预测之前数据整理的最佳实践

机器算法验证 预测模型 随机森林 数据预处理
2022-03-29 19:42:45

在使用随机森林进行预测时,我们经常(或总是)需要执行一些预处理。由于我有计算背景,并且我从统计学中所知道的几乎所有知识都来自自学,因此这个过程变得更加直觉,而不是理论。

例如,我遇到的一些事情是处理

  1. 异常值。我们应该将它们全部删除吗?如果是这样,我们是否考虑基于 3/2 规则的异常值?我们应该保留它们吗?为什么?
  2. 在处理观察值的增量时(例如,假设我要从另一个中减去一个学生的成绩),我应该标准化所有学生的增量还是只坚持绝对增量?
  3. 坚持同一个学生案例,如果我有累积数据(假设每次考试我总结他们的最后成绩)。流程应该一样吗?
  4. 我们是否需要应用任何类似log或其他的数据转换?如果是这样,应该什么时候完成?数据范围大时?在这里更改数据域有什么意义?
  5. 如果我有一个分类目标,我可以应用回归而不是分类,这样输出将是(假设类是 0、1、2)0.132、0.431。会更准确吗?
  6. 随机森林更能说明什么样的问题?大型数据集?
  7. 我应该丢弃不太重要的变量吗?也许它只是制造噪音?

我知道预处理取决于问题、数据等,而且我知道在预处理时还有很多事情要寻找。在这里,我更想了解预处理数据背后的概念以及这样做时要寻找的关键点。那么考虑到这一点,预处理数据时要寻找的关键点是什么?(如果我没有提到任何其他重要的点,而且我确信缺少很多内容,请也考虑一下)。想象一下,你正在教你的爷爷:)

3个回答

在使用随机森林进行预测时,我们经常(或总是)需要执行一些预处理。

这不是真的。随机森林真的是“现成的”。

异常值。我们应该将它们全部删除吗?如果是这样,我们是否考虑基于 3/2 规则的异常值?我们应该保留它们吗?为什么?

RF 中使用的基本模型是一个大型决策树(通常通过 CART 构建)。决策树对异常值具有鲁棒性,因为它们将它们隔离在特征空间的小区域中。然后,由于每个叶子的预测是平均值(用于回归)或多数类(用于分类),在单独的叶子中被隔离,异常值不会影响其余的预测(例如,在回归的情况下,它们不会影响其他叶子的平均值)。底线:您不关心 RF 中的异常值。如果它们是异常观察(例如,由于记录错误),只需删除它们。如果它们是有效案例,您可以保留它们。

在处理观察值的增量时(例如,假设我要从另一个中减去一个学生的成绩),我应该标准化所有学生的增量还是只坚持绝对增量?坚持同一个学生案例,如果我有累积数据(假设每次考试我总结他们的最后成绩)。流程应该一样吗?

这里的问题与射频无关,它与算法无关。真正的问题是你想做什么?你想预测什么?

我们是否需要应用任何数据转换,如日志或任何其他?如果是这样,应该什么时候完成?数据范围大时?在这里更改数据域有什么意义?

出于同样的原因,您无需担心异常值,您无需在使用 RF 时应用任何类型的数据转换。对于分类,如果您遇到类不平衡问题,您可能需要应用某种重新采样/加权策略,但仅此而已。

如果我有一个分类目标,我可以应用回归而不是分类,这样输出将是(假设类是 0、1、2)0.132、0.431;那么它会更准确吗?

如果您的目标是分类的,则不能应用回归。

随机森林更能说明什么样的问题?大型数据集?

RF 适用于所有类型的问题。人们(尤其是在医学领域、基因组学等领域)甚至主要使用它来衡量其可变的重要性。在遗传学中,这些人面临“小 - 大 ”问题,RF 也做得很好。无论如何,机器学习通常需要足够数量的训练和测试数据,尽管没有一般规则。如果您的训练数据代表了您的所有概念,并且这些概念很容易捕获,那么几百次观察就足够了。但是,如果应该学习的内容非常复杂并且某些概念的代表性不足,则需要更多的训练数据。np

我应该舍弃不太重要的变量吗?也许它只是制造噪音?

通过 CART 构建的决策树的另一个不错的特性是它们会自动将不重要的变量放在一边(每次拆分时只选择最佳拆分器)。Hastie 等人的开创性著作中。(2009 年),作者表明,使用 100 个纯噪声预测器和 6 个相关预测器,相关变量在每次拆分时仍有 50% 的时间被选择。所以你真的不需要担心 RF 中的变量选择。当然,如果您知道某些变量没有贡献,请不要包含它们,但如果您正在研究的过程的基本机制大多未知,您可以包含所有候选预测变量。

从理论上讲,随机森林是理想的,因为它通常由Breiman 和 Cuttler假设和描述。在实践中,它非常好,但远非理想。因此,这些问题是非常有效的。

  1. RF 并没有像人们普遍认为的那样理想地处理异常值。它们甚至容易受到具有极端值的单个异常值的影响,如随机森林如何对异常值不敏感?,还有几篇关于异方差如何影响 RF 预测的论文。在现实生活中的数据中,您可能有很多 (1-2%) 的此类异常值是由拼写错误(对于人工输入的数据,例如 3200 而不是 32.00)、感应引起的电流跳跃或仅仅由于意外暴露引起的(对于物联网),异方差等。这些“异常值”最终出现在决策树的许多叶子中,将预测拉到更高的值。

  2. 在大量 target_value = 0 的不平衡数据的情况下,RF 往往会显着低估预测。

  3. 对数转换可以提高准确性,尤其是在数据非常倾斜(尾巴很长)的情况下。例如,参见 Jayant Malani 等人的“预测自行车共享需求”。( pdf ) 和这个 kaggle 提交

  4. RF 倾向于为具有较大值范围(分类和连续)的变量分配更高的重要性。例如,请参阅此博客文章:分类变量是否在您的随机森林中丢失了?

因此,即使在随机森林的情况下,数据预处理也非常重要。

我希望,这个答案构成了问题的有效性,并且链接将提供一些带有起点的答案。

在对数据进行预处理时,您通常会尝试实现以下目标:

A. 从​​您的数据中删除错误。例如,如果您的异常值是由于数据记录错误造成的,您可能希望在预处理阶段解决此问题。识别异常值的各种规则应被视为提供初步猜测,需要进一步调查。

B. 在您合理预期预测变量的不同值可能与结果变量相关的情况下创建变量。这是需要特定领域知识的位,并且好的变量通常使用比率、差异、变量的平均值等来构建。

C. 修改数据以避免我们拟合的任何模型的限制性假设。

基于树的方法(如随机森林)的超酷之处在于,它们在 C 类预处理中所需的工作量要少得多。特别是,通常不需要规范化、删除非错误异常值、丢弃变量和对数转换。但是,基于树的方法的代价是它们需要大量数据,因此对于较小的样本(例如,少于 10,000 个案例),我的经验是 glm 通常会做得更好,但这会带来类型C 处理,经过 25 年的建模,我仍然觉得这是一个挑战。