如何将随机森林用于具有缺失值的分类变量

机器算法验证 分类数据 预测模型 随机森林 缺失数据
2022-03-19 13:41:11

我有一个 1M 行和 600 个特征的标记数据集。我正在尝试建立一个用于预测的监督学习模型。我特别在 R 中使用随机森林。我拥有的数据具有以下属性。

  1. 大多数特征本质上是分类的。
  2. 每个分类变量都有多个级别(其中一些有 20 个级别)
  3. 某些功能缺少数据

随机森林可以在不估算这些缺失值的情况下工作吗?如果不是,那么估算这些缺失的分类值的最佳方法是什么?任何解决此问题的文献或 R 功能都将非常有帮助。

3个回答

R randomForest 包包括用于对缺失值进行粗略估算的函数,然后根据 RF 运行中的案例接近度迭代地改进此估算。

已经提出了许多其他方法作为 rf 和决策树处理缺失值的方法:

1) 拆分时将它们排除在外,并进行偏差校正以减少杂质。

2)将它们拆分到每个节点的第三个分支上。

3) 按照 chf 的建议,将它们标记为单独的类别。对于数值特征,估算并创建一个单独的 x_is_missing 特征。

4)通过分析哪些特征在同一个地方工作得很好来识别特征之间的“代理拆分器”关系,然后在缺少一个特征时使用代理进行拆分。

5) 在树的分支内进行局部插补。

尽管可能存在,但我不知道其中大多数的 R 代码。

我实现了一个可以执行前两种方法的独立实用程序: https ://github.com/ryanbressler/CloudForest

使用 write.arff 将您的数据转储出来并调用它并重新加载预测(存储在 tsv 中)很容易。(arff 文件格式非常适合具有缺失值的分类数据)。

我选择了这两种方法,因为它们不会增加大型数据集所需的计算量。我发现当缺失值很少并且它们没有有意义地分布时,第一个效果很好......插补通常在这里也很有效。

第二种,三向拆分,当缺少值的事实可能很重要时效果很好。这在设计不佳且不包括“不知道”或“不适用”类别的调查中很常见。方法3在这里也可以很好地工作。

在我的脑海中,我会说这不应该是一个问题。R 中的rf包使用 CART 实现随机森林。关于树的最好的事情之一是它们如何“本机”能够处理分类变量和缺失变量。是包文档;您可以从 CRAN 下载软件包本身。

James、Witten、Hastie 和 Tibshirani在 R 中应用统计学习的介绍中的第 8 章很好地介绍了树方法,并且还介绍了第 328 页的随机森林。

估算缺失的变量本身就是一整件事,根据您的需求和数据,您可能不必这样做就可以侥幸逃脱。如果您确实必须执行插补,您可能需要在此处此处查看一些快速指示,但您可能只需要阅读插补方法并对要使用的内容做出判断。

您可以简单地为每个代表缺失数据的分类变量引入一个新级别。然后,您只需用这个新类别替换缺少的字段。