R:如何在 randomForest 中使用长向量?

Posted

技术标签:

【中文标题】R:如何在 randomForest 中使用长向量?【英文标题】:R: how to use long vectors with randomForest? 【发布时间】:2014-04-22 16:30:35 【问题描述】:

R 3.0.0 的新特性之一是引入了长向量。但是,.C() 和 .Fortran() 不接受长向量输入。在R-bloggers 我发现:

这是一种预防措施,因为现有代码不太可能被编写来处理长向量(并且 R 包装器通常假设 length(x) 是整数)

我使用 R-package randomForest 并且这个包显然需要 .Fortran() 因为它崩溃并留下错误消息

randomForest.default 中的错误:.Fortran 不支持长向量(参数 20)

如何克服这个问题?我在 Windows 7 64 位计算机上使用 randomForest 4.6-7(在 R 3.0.2 下构建)。

【问题讨论】:

通过一些工作,可以扩展 R 包连接已编译代码以支持长向量。请参阅 R 包 cran.r-project.org/package=dotCall64 和 doi.org/10.1016/j.softx.2018.06.002 【参考方案1】:

保证您的输入数据帧将被 randomForest 接受的唯一方法是确保数据帧内的向量长度不超过 2^31 – 1(即不长)。如果您必须从包含长向量的数据框开始,那么您将拥有数据框的子集以实现向量的可接受维度。这是您可以对数据框进行子集化以使其适合 randomForest 的一种方法:

# given data frame 'df' with long vectors
maxDim <- 2^31 - 1;
df[1:maxDim, ]

但是,这样做存在一个主要问题,即您将丢弃出现在第 2^31 行或更高行中的所有观察值(即特征)。在实践中,您可能不需要这么多的观察来运行随机森林计算。解决问题的简单方法是简单地对原始数据集进行统计有效的子样本,其大小不超过 2^31 - 1。使用非长类型的 R 向量存储数据,并且应该运行 randomForest 计算没有任何问题。

【讨论】:

以上是关于R:如何在 randomForest 中使用长向量?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 randomForest 包,如何从分类模型中获取概率?

如何在 R 中并行运行多个内核上的 randomForest? [复制]

在 R 中更快地获得 randomForest 回归

使用 R 对 randomForest 执行交叉验证

y - ymean 中的错误:二元运算符 randomForest R 的非数字参数

如何替换包 randomForest r 中的引导步骤