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? [复制]