R glmnet:使用多项式和pmax时出现分段错误

R glmnet:使用多项式和pmax时出现分段错误,r,segmentation-fault,glmnet,multinomial,R,Segmentation Fault,Glmnet,Multinomial,我使用glmnet包来运行多项式套索回归。使用family=“multinomical和带有p变量和n样本和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(dat

我使用
glmnet
包来运行多项式套索回归。使用
family=“multinomical
和带有
p
变量和
n
样本和
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
我的第一个问题是:为什么?这有数学上的原因吗?(我想是的…)


第二个问题是:难道没有比分段错误更好的解决方案吗?…比如警告之类的?或者仅仅使用
pmax以下是我在R3.0.2、64k、Windows7、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 

lasso我知道这个答案太晚了,但以防万一有人会发现同样的问题:

我遇到了同样的问题,并按照中的步骤解决了它。 基本上,对于任何版本的MATLAB,请尝试

mex -v -setup
当落下时,会给出一个要使用的编译器列表。安装最新的编译器,但不要在MATLAB版本之后安装(对于2016a,我安装了XE2016和VS2015)。然后

我会做好的

在Linux机器上(使用2014a),我尝试了

mex -largeArrayDims glmnetMex.F GLMnet.f
使用gcc编译器,它也起了作用


希望这可能会有所帮助。我花了几周时间才弄明白这一点。

sry,我在第一篇文章中添加了系统信息。不,这个警告是完全正常的。这就是使用pmax的原因:并不是所有的lamda值都被使用,而是只有在一定数量的变量具有非零系数之前才会被使用。每当没有segm时,这个警告也会出现在我的设置中我很惊讶最新版本的glmnet甚至还有一个2.x版本的R。你如何升级以获得正确的代码?
mex -v -setup
mex glmnetMex.F glmnet.f
mex -largeArrayDims glmnetMex.F GLMnet.f