【发布时间】:2016-03-13 22:47:23
【问题描述】:
我有一个非常大的矩阵,我试图在具有大量内存的服务器上运行 glmnet。即使在非常大的数据集上达到某个点,它也能正常工作,之后我收到以下错误:
Error in elnet(x, ...) : long vectors (argument 5) are not supported in .C
如果我理解正确,这是由 R 中的限制引起的,它不能有任何长度超过 INT_MAX 的向量。那是对的吗?是否有任何不需要完全重写 glmnet 的可用解决方案?是否有任何替代的 R 解释器(Riposte 等)解决了这个限制?
谢谢!
【问题讨论】:
-
在您的代码中,您是否执行了矩阵的子集?我可能错了,但如果矩阵有超过 360 亿个元素,你就不能执行矩阵子集。在这种情况下,您必须对矩阵进行子集化,就好像它是一个巨大的原子向量(实际上是因为矩阵只是一个具有维度属性的向量)。
-
在我的代码中,我使用文件支持的 bigmatrix 来避免这些问题,但是当我运行 glmnet 时,我必须将它作为 R 矩阵传递,如下所示:
theMatrix[,]。 -
嗨,丹尼。我的评论与问题没有直接关系,但它会有所帮助。看看 Michael Kane 的 pirls 包 - github.com/kaneplusplus/pirls。 Mb 这个求解器适用于长向量。
-
问题确实是 glmnet 中的底层设计,以及它对(有效地弃用和不鼓励的
.C())接口的使用。 Mike Kane 仔细研究了一下,这是 pirls 确实应该提供一些东西。它当然更小/更年轻/不太好测试,所以 YMMV。 -
刚刚发现另一个非常有前途的包 - github.com/jaredhuling/oem
标签: r vector bigdata scalability glmnet