Le problème mentionné dans cette question est résolu dans la version 1.7.3 du package R glmnet.
J'ai des problèmes avec glmnet avec family = multinomial et je me demandais si j'ai rencontré quelque chose de similaire ou si je pourrais être en mesure de me dire ce que je fais mal.
Lorsque je mets mes propres données fictives, l'erreur "Erreur d'application (nz, 1, médiane): dim (X) doit avoir une longueur positive" est signalée lorsque je cours cv.glmnet
, ce qui en plus de dire "cela n'a pas fonctionné" n'était pas extrêmement informatif pour moi.
y=rep(1:3,20) #=> 60 element vector
set.seed(1011)
x=matrix(y+rnorm(20*3*10,sd=0.4),nrow=60) # 60*10 element matrix
glm = glmnet(x,y,family="multinomial") #=> returns without error
crossval = cv.glmnet(x,y,family="multinomial") #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
crossval = cv.glmnet(x,y,family="multinomial",type.measure="class") #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
crossval = cv.glmnet(x,y,family="multinomial",type.measure="mae") #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
cvglm = cv.glmnet(x,y,family="multinomial",lambda=2) #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
Voici une description visuelle du problème que j'essayais d'obtenir de résoudre glmnet, si cela aide:
my_colours = c('red','green','blue')
plot(x[,1],x[,2],col=my_colours[y])
Je suis en mesure d'exécuter l'exemple de code à partir des documents du package, ce qui me fait penser que je ne comprends pas bien quelque chose ou qu'il y a un bogue dans glmnet.
library(glmnet)
set.seed(10101)
n=1000;p=30
x=matrix(rnorm(n*p),n,p) #=> 1000*30 element matrix
beta3=matrix(rnorm(30),10,3)
beta3=rbind(beta3,matrix(0,p-10,3))
f3=x%*% beta3
p3=exp(f3)
p3=p3/apply(p3,1,sum)
g3=rmult(p3) #=> 1000 element vector
set.seed(10101)
cvfit=cv.glmnet(x,g3,family="multinomial")
Ceci utilise R version 2.13.1 (2011-07-08) et glmnet 1.7.1, bien que je puisse générer le même problème sur R 2.14.1. Des idées des gens?
la source
Convertissez d'abord votre matrice par exemple
la source