当我在使用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意味着更大的验证子集和更小的丢弃任何变量的机会。
还要注意以下几点:
- 仅在alpha接近1(alpha=1等价于L1正则化)并使用标准化时出现错误。 - 采用family="Gaussian"不会出现错误。
你认为可能会发生什么事情?