R glmnet : segmentation fault when using multinomial and pmax

标签 r segmentation-fault glmnet multinomial

我使用 glmnet运行多项套索回归的包。使用 family="multinomial 时和一个带有 p 的数据集变量和 n sample 和 pmax=x如果 x 发生段错误是奇数(如果不是 pmax>p 。在这种情况下,它很可能被忽略,因为它没有影响)。一个例子:

n=100
p=20
require(glmnet)
D= as.data.frame(replicate(p, rnorm(n)))
D[,p] = as.factor(round(rnorm(n)))

lasso  <- glmnet(data.matrix(D[, -p]), D[, p], standardize=T, family="multinomial")         ## works
lasso  <- glmnet(data.matrix(D[, -p]), D[, p], standardize=T, family="multinomial", pmax=7) ## works, because it is odd
lasso  <- glmnet(data.matrix(D[, -p]), D[, p], standardize=T, family="multinomial", pmax=24 ## works, because pmax>p
lasso  <- glmnet(data.matrix(D[, -p]), D[, p], standardize=T, family="multinomial", pmax=10)## crashes

和错误信息:

 *** caught segfault ***
address 0x22de58a8, cause 'memory not mapped'

Traceback:
 1: .Fortran("lognet", parm = alpha, nobs, nvars, nc, as.double(x),     y, offset, jd, vp, cl, ne, nx, nlam, flmin, ulam, thresh,     isd, intr, maxit, kopt, lmu = integer(1), a0 = double(nlam *         nc), ca = double(nx * nlam * nc), ia = integer(nx), nin = integer(nlam),     nulldev = double(1), dev = double(nlam), alm = double(nlam),     nlp = integer(1), jerr = integer(1), PACKAGE = "glmnet")
 2: lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,     nvars, jd, vp, cl, ne, nx, nlam, flmin, ulam, thresh, isd,     intr, vnames, maxit, kopt, family)
 3: glmnet(data.matrix(D[, -p]), D[, p], standardize = T, family = "multinomial",     pmax = 10)

我的第一个问题是:为什么?这有数学上的原因吗? (我想是的……)

第二个是:没有比段错误更好的解决方案吗?...比如警告之类的?或者只使用 pmax<-pmax-1

编辑:好的,它似乎有点复杂。有时,仅当我第二次执行具有相同 pmax 编号的完全相同的命令时才会发生段错误。

另外我发现了这个错误

*** glibc detected *** /usr/lib64/R/bin/exec/R: double free or corruption (out): 0x0000000005c41720 ***
======= Backtrace: =========
....

对于 pmax 的偶数和奇数......

现在它对我来说更像是一个错误......或者?

编辑 2: 我在 linux 环境(64 位)中使用 glmnet 1.9-5 运行 R 2.15.2 我还在另一台使用 ubuntu 64 位和 R 3.0.2 的 PC 上遇到段错误

最佳答案

这是我在 R 3.0.2、64k、Windows 7、glmnet1.9-5 下得到的

lasso  <- glmnet(data.matrix(D[, -p]), D[, p], standardize=T, family="multinomial", pmax=10)
Warning message:
from glmnet Fortran code (error code -10005); Number of nonzero coefficients along the path exceeds pmax=10 at 5th lambda value; solutions for larger lambdas returned 

你没有说明你的设置,所以我不能评论你为什么不捕获错误,但这条消息应该提供相当多的见解 :-) 大 pmax 导致问题的原因。

编辑:澄清一下:我没有遇到段错误。

关于R glmnet : segmentation fault when using multinomial and pmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21044159/

相关文章:

glm - 如何在没有正则化的情况下使用 glmnet

r - 如何使用字符向量过滤数据框

r - 计算 R 中的尾随零

c - C 中奇怪的段错误

C++ STL 队列、引用和段错误

c - 初始化大 vector 时出现段错误

r - 将 R(本地)中保存的 ML 模型上传到 Azure 机器学习工作室

css - 使 R 中 selectInput 的第一个元素 Shiny 显示为粗体

r - 我们如何为 glmnet 指定自定义 lambda 序列

r - cv.glmnet对于使用编码器错误的模拟数据的岭而不是套索失败