在R包glmnet的1.7.3版本中解决了此问题中提到的问题。
我在使用family = multinomial运行glmnet时遇到一些问题,并且想知道是否遇到了类似的问题,或者是否能够告诉我我在做什么错。
当我放入自己的虚拟数据时,运行时会报告错误“ apply(nz,1,中位数):dim(X)必须具有正长度的错误” cv.glmnet
,除了说“它没有用”之外,对我来说并没有提供太多信息。
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
这是我试图让glmnet解决的问题的直观描述,如果有帮助的话:
my_colours = c('red','green','blue')
plot(x[,1],x[,2],col=my_colours[y])
我能够从软件包文档中运行示例代码,这使我怀疑是我误解了某件事,还是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")
尽管我可以在R 2.14.1上产生相同的问题,但它使用的是R版本2.13.1(2011-07-08)和glmnet 1.7.1。有什么想法的人吗?