如何在随机森林中使用长向量?

13

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

这是一种预防措施,因为现有代码很少会处理长向量(而且R包装器通常假定length(x)是一个整数)

我使用的是R-package randomForest,显然需要.Fortran(),因为它崩溃并显示错误消息:

Error in randomForest.default: long vectors (argument 20) are not supported in .Fortran

如何解决这个问题?我在Windows 7 64位计算机上使用randomForest 4.6-7(在R 3.0.2下编译)。


通过一些工作,我们可以扩展R软件包与编译代码的接口,以支持长向量。请参阅R软件包https://cran.r-project.org/package=dotCall64和https://doi.org/10.1016/j.softx.2018.06.002。 - Nairolf
1个回答

2

确保你的输入数据框被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计算应该可以顺利运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接