【发布时间】:2014-04-19 16:09:12
【问题描述】:
从具有大型稀疏数据集的 glmnet 包中运行 R cv.glmnet 函数我经常收到以下错误:
# Error: Matrices must have same number of columns in .local(x, y, ...)
我已经用随机生成的数据复制了错误:
set.seed(10)
X <- matrix(rbinom(5000, 1, 0.1), nrow=1000, ncol=5)
X[, 1] <- 0
X[1, 1] <- 1
Y <- rep(0, 1000)
Y[c(1:20)] <- 1
model <- cv.glmnet(x=X, y=Y, family="binomial", alpha=0.9, standardize=T,
nfolds=4)
这可能与初始变量筛选有关(基于X 和Y 的内积)。 glmnet 不是将系数固定为零,而是从X 矩阵中删除变量,并且这是针对每个验证集完成的。然后,如果变量在其中一些中被删除并保留在其他中,则会出现错误。
有时增加nfolds 会有所帮助。这与假设一致,因为 nfolds 的数量越多意味着验证子集越大,并且在其中任何一个中删除变量的机会就越小。
一些补充说明:
错误仅出现在接近 1 的alpha(alpha=1 相当于 L1 正则化)并使用标准化。 family="Gaussian" 不会出现。
你认为会发生什么?
【问题讨论】:
-
我注意到您使用的是默认 lambda 序列,不建议这样做,您应该提供自己的序列。