这不是一个完整的答案 - 更多的是解释为什么这如此困难 - 但肯定太长了,无法发表评论。
首先,lasso/ridge/elastic net 方法基本上建立在模型矩阵上的操作(即每个观察一行和一个 predictor 变量的矩阵,即从输入变量),因此在某些时候确实无法构建模型矩阵(尽管您可能可以分段进行,见下文)。
稀疏模型矩阵模型将有助于构建主要涉及因子(被转换为指标或虚拟变量)的模型矩阵,但我认为它不会对您有太大帮助。
这个math overflow question 解释了k 变量的顺序多项式n 需要choose(n+k,k) 派生变量(在R 术语中:这是给出k 来自@987654328 的可能样本数量的二项式系数@ 对象)。构造一个函数,报告模型矩阵的列数、元素总数(如果有r 行)以及模型矩阵的总大小(以 Mb 为单位):
calc_size <- function(deg,nvars,r=9000) {
cc <- choose(deg+nvars,nvars)
return(c(cc,cc*r,cc*r*8/2^20))
}
calc_size(10,13,r=9000)
告诉您,您需要 1.14 百万 列、102 十亿 个总条目和 77 Gb 的空间来存储此问题的模型矩阵。这无需担心您需要多少空间来扩展分类变量。如果您真的想将 53 个全数字列处理到 10 阶,则需要 1.27*10^11 列和 PB 的存储空间。 (稀疏模型矩阵较少,但组合稀疏(虚拟变量)和非稀疏列可能会很棘手......)
如果你真的想这样做,你可以使用biglasso 包。 vignette 给出了一个从文件支持的 31 G 数据集拟合 n = 2898, p = 1,339,511 的数据集的示例。这比你预期的要小,但至少它是相同的数量级(在 4 个核心上拟合大约需要 51 分钟......)如果我这样做,我会首先构建我的模型矩阵(可能是小块,例如一次 500 或 1000 行)并将块存储/连接到磁盘上的数据文件中,然后使用 biglasso 来拟合模型。
不过,根据您可用的硬件和技术专长水平,您可能不得不缩减您的目标(C(10,53) 列上的蛮力不太可能奏效)。