为什么随机森林不处理预测变量中的缺失值?

机器算法验证 随机森林 缺失数据 助推
2022-01-17 04:01:30

不处理缺失值的理论原因是什么?梯度提升机器、回归树处理缺失值。为什么随机森林不这样做?

4个回答

Gradient Boosting Trees 使用 CART 树(在标准设置中,正如其作者提出的那样)。CART 树也用于随机森林。@ user777 所说的是正确的,RF 树处理缺失值的方法是通过平均值插补,粗略平均值/模式,或者基于近似值的平均/模式。这些方法由 Breiman 和 Cutler 提出并用于射频。这是作者的参考Missing values in training set

但是,可以使用其他类型的决策树构建 GBM 或 RF。CART 的常用替代品是 Quinlan 提出的 C4.5。在 C4.5 中,数据集上的缺失值不会被替换。相反,计算的杂质函数通过用缺失值的比率惩罚杂质分数来考虑缺失值。在测试集上,在具有缺失值测试的节点中进行评估,为每个子节点建立预测并稍后聚合(通过加权)。

现在,在许多实现中使用 C4.5 代替 CART。主要原因是为了避免昂贵的计算(CART 有更严格的统计方法,需要更多的计算),结果似乎相似,结果树通常更小(因为 CART 是二进制的,而 C4.5 不是)。我知道 Weka 使用这种方法。我不知道其他图书馆,但我希望它不是一个单一的情况。如果您的 GBM 实施是这种情况,那么这将是一个答案。

“[RF] 不处理缺失值的理论原因是什么?梯度提升机器、回归树处理缺失值。为什么随机森林不这样做?”

RF确实处理缺失值,只是与 CART 和其他类似决策树算法的处理方式不同。User777 正确描述了 RF 用于处理缺失数据的两种方法(中值插补和/或基于接近度的测量),而 Frank Harrell 正确描述了 CART 中缺失值的处理方式(代理拆分)。有关更多信息,请参阅有关CART(或它的 FOSS 表亲:RPART)和RF的缺失数据处理的链接

恕我直言,在 Ishwaran 等人的 2008 年题为Random Survival Forests的论文中清楚地涵盖了您的实际问题的答案。对于为什么 RF 不以与 CART 或类似的单决策树分类器相同的方式处理缺失数据的原因,它们提供了以下合理的解释:

“虽然代理分裂对树木很有效,但该方法可能不太适合森林。速度是一个问题。寻找代理分裂是计算密集型的,并且在种植大量树木时可能变得不可行,特别是对于完全饱和的树木此外,代理拆分在森林范式中甚至可能没有意义。RF 在拆分节点时随机选择变量,因此,节点内的变量可能不相关,并且可能不存在合理的代理拆分。另一个问题是代理拆分会改变变量的解释,这会影响诸如 [变量重要性] 之类的度量。

由于这些原因,射频需要采用不同的策略。”

这是一个旁白,但对我来说,这对那些声称 RF 使用 CART 模型集合的人提出了质疑。我在很多文章中都看到过这种说法,但我从未见过这样的声明源自 RF 上的任何权威文本。一方面,RF 中的树是在没有修剪的情况下生长的,这通常不是构建 CART 模型时的标准方法。另一个原因是您在问题中提到的原因:CART 和其他决策树集合处理缺失值,而 [原始] RF 没有,至少在内部不像 CART 那样。

考虑到这些注意事项,我认为您可以说 RF 使用了一组类似 CART 的决策树(即,一堆未修剪的树,生长到最大程度,无法通过代理拆分处理丢失的数据)。也许这是那些细微的语义差异之一,但我认为这是值得注意的。


编辑:在我的旁注中,这与提出的实际问题无关,我说“我从未见过这样的陈述来源于任何关于 RF 的权威文本”。结果 Breiman DID明确指出 CART 决策树用于原始 RF 算法:

“具有随机特征的最简单的随机森林是通过在每个节点上随机选择一小组输入变量进行分割而形成的。使用CART 方法将树增长到最大尺寸并且不要修剪。” [我的重点]

资料来源:随机森林的第 9 页。布莱曼 (2001)

然而,我仍然坚持(尽管更不稳定)这些是类似 CART 的决策树,因为它们是在没有修剪的情况下生长的,而 CART 通常永远不会在这种配置中运行,因为它几乎肯定会过度拟合您的数据(因此首先进行修剪)。

随机森林确实处理丢失的数据,它有两种不同的方式:

1) 不对缺失数据进行插补,但提供推断。2) 输入数据。然后使用估算的数据进行推理。

这两种方法都在我的 R 包randomForestSRC (与 Udaya Kogalur 共同编写)中实现。首先,重要的是要记住,因为随机森林采用随机特征选择,单棵树(CART 等)使用的传统缺失数据方法不适用。Ishwaran 等人提出了这一点。(2008 年),“随机生存森林”,应用统计年鉴2、3其中一位评论者很好地阐述了这一点。

方法 (1) 是一种“动态插补”(OTFI) 方法。在拆分节点之前,变量的缺失数据是通过从非缺失的包内数据中随机抽取值来估算的。该插补数据的目的是在节点在缺少数据的变量上拆分的情况下,可以将案例分配给子节点。然而,插补数据不用于计算仅使用非缺失数据的拆分统计量。在节点分裂之后,估算数据被重置为缺失,并且重复该过程直到到达终端节点。OTFI 保留了袋外数据的完整性,因此变量重要性 (VIMP) 等性能值保持无偏。OTFI 算法在 Ishwaran 等人 (2008) 中进行了描述,并在已退役的 randomSurvivalForest 包中实现,

方法(2)是使用randomForestSRC中的“impute”函数实现的。用于估算数据的无监督、随机和多变量拆分方法是可用的。例如,多元分裂概括了非常成功的missForest插补方法(Stekhoven & Bühlmann (2012),“MissForest—混合类型数据的非参数缺失值插补”,Bioinformatics 28,1 使用缺失数据调用估算函数将返回一个估算数据框,该数据框可以使用原始森林函数“rfsrc”进行拟合。

使用“impute”实现的不同森林缺失数据算法的详细比较在最近与唐飞的论文“随机森林缺失数据算法”,2017中进行了描述。我建议从 randomForestSRC 查阅“rfsrc”和“impute”的帮助文件,以获取有关插补和 OTFI 的更多详细信息。

递归分区使用基于非缺失预测变量的代理拆分,这些非缺失预测变量与拥有观察缺失值的预测变量相关。理论上,使用相同的想法实现随机森林似乎是可能的。我不知道是否有任何随机森林软件这样做了。