【问题标题】:Large matrix: solve(crossprod(X)) when dim(X) = 100,000:5000大矩阵:当 dim(X) = 100,000:5000 时求解(crossprod(X))
【发布时间】:2011-08-09 03:10:34
【问题描述】:

我需要对大型数据矩阵进行简单的两阶段最小二乘回归。这只需要一些crossprod()solve() 命令,但矩阵的尺寸为100,000 x 5000 矩阵。我的理解是,在内存中保存这样的矩阵会占用不到 4GB 的内存。不幸的是,我的 64 位 Win7 机器只有 8GB 的​​ RAM。当我尝试操作有问题的矩阵时,我收到通常的“无法分配大小向量”消息。

我考虑了许多选项,例如 ffbigmemory 包。但是,我需要的矩阵运算的基本 R 函数只支持通常的矩阵对象类型,而不是 bigmatrix 类型。

似乎可以从biglm()扩展代码,但是我的这个项目的时间很紧,所以我想和大家一起检查一下是否有现成的此类问题的解决方案。抱歉,如果这个问题之前已经解决(我找不到)或者问题太笼统。

【问题讨论】:

  • 您是否尝试过从内存中删除不需要的程序/服务?使用基本主题而不是 Aero 主题也可能有所帮助。

标签: r


【解决方案1】:

是的,biglm 中存在一个现成的解决方案,您已经确定了这个包。线性回归可以与更新方案一起使用;该基本属性在包中实现。

将您的数据转储到磁盘,例如 SQLite 并研究包文档并继续进行,例如,10,000 个块。

【讨论】:

  • 感谢您的回答 Dirk(您在 Rcpp BTW 上的工作的忠实粉丝)。但我很困惑。 2SLS 要求我在工具 Z 的矩阵上回归我的矩阵 X,并且我使用该模型的预测来估计“第二阶段”的系数 b:P=(Z'Z)^{-1} Z' X, b=(X'PX)^{-1} X'Py, X-hat=PX。无论我使用什么公式,biglm() 只会给我预测作为唯一左侧变量的值向量,所以我不能通过首先生成 X-hat=PX 矩阵来手动完成这两个阶段.
  • 已经有几年了,但你不能将 2SLS 作为两个不同的回归运行吗?然后每个人都可以使用 biglm 来克服内存限制。或者只是租一个具有更多内存的 Amazon EC2 实例...
  • 是的。获得更通用的解决方案仍然很好,因此我也可以将其应用于不同的问题。尽管如此,biglm 的代码看起来还是很简单的,所以如果/当我找到一些时间时,我可能会最终玩弄一下它。谢谢!
  • @DirkEddelbuettel 这也是我的理解。这几乎就是它被称为“两阶段”的原因。
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多