从具有大型稀疏数据集的 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"
。
你认为会发生什么?