修改R语言的gbm包

11

我们正在尝试在一个相当大的数据集上(约1.4亿行)使用gbm包进行实验,在R的内存要求方面遇到了问题。

我们已经尝试使用'gbm'和'bigmemory'这两个包进行组合,但没有成功,接下来我们想修改C++源代码,从本地数据库中获取存储在其中的数据集。

因此,我们想知道是否有更适合或者更为常见的做法来改变gbm C++代码中的分配方式。是否有人尝试过类似的操作?


2
你考虑过采样吗?这可能更多是CrossValidated / stats.stackexchange.com上的方法论问题。 - Dirk Eddelbuettel
在这一初始步骤中,我们希望传递所有这些数据。感谢提供 stats.stackexchange.com 的参考,我们也会在那里询问。 - Trifyllenia
(+1) @Dirk 感谢您的建议。CV将问题反弹回来,因为重点是说服R分配更多的RAM(或以某种方式更有效地利用RAM),而不是任何统计问题。 - whuber
我明白了。使用bigmemory这样的东西的初始想法是好的。需要一个外部指针来将内存“远离R”,而big memory可以做到这一点。通过Rcpp::XPtr,Rcpp调用也会有所帮助。 - Dirk Eddelbuettel
只需使用bigmemory,但尝试将数据分成更易访问的部分。当遇到这个问题时,我总是会将我的数据分开。因此,数据=largedata(1:10),然后data1 = largedata(10:20)等等。也许这是唯一的解决方案,因为R的内存管理不是很好。祝你好运! - Sanshine
你看过 R 里的 ff、ffbase 和 ETLUtils 包吗?我能够读取 ido(txt)文件并对其进行一些处理。ff 包将 ido、csv、txt 文件作为 ffdf 数据框读入。从那里,你可以使用 ff 和 ffbase 包中的函数,尽管需要一些时间来适应。在 ETLUtils 包中,有一些我没有尝试过的函数可以从数据库中读取数据,但值得研究,例如:read.dbi.ffdf 和 read.odbc.ffdf。让我们知道你的进展如何。 - Lorcan Treanor
2个回答

3
我不熟悉gbm包,但如果它适用于数据框或某种向量,则可以使用ff包
引用:ff包提供了存储在磁盘上但通过透明地映射主内存中的一页(pagesize)而表现得(几乎)像在RAM中的数据结构...

2
在CRAN上,你可以获取每个软件包的未编译版本,其中C代码仍在文本文件中。这是gbm软件包源代码的链接:http://cran.cnr.berkeley.edu/src/contrib/gbm_1.6-3.2.tar.gz。提取软件包,更改C代码并使用R CMD INSTALL命令自行编译它,然后你就可以使用你修改过的代码在R中加载该软件包。

@Trifyllenia 这有帮助吗? - Mattias Farnemyhr

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