如何解决如何从 glmnet 多项式中恢复非零系数?
来自 https://glmnet.stanford.edu/articles/glmnet.html#multinomial-regression-family-multinomial- 的工作示例:
data(MultinomialExample)
x <- MultinomialExample$x
y <- MultinomialExample$y
cvfit <- cv.glmnet(x,y,family = "multinomial")
cvfit
然后返回:
Call: cv.glmnet(x = x,y = y,family = "multinomial")
Measure: Multinomial Deviance
Lambda Index Measure SE Nonzero
min 0.009791 35 1.409 0.05611 14
1se 0.022619 26 1.455 0.04132 9
现在我想提取 9 个非零系数。但是:
sum(matrix(coef(cvfit)$'1') != 0)
sum(matrix(coef(cvfit)$'2') != 0)
sum(matrix(coef(cvfit)$'3') != 0)
返回 10、12、10。此外:
length(Reduce(intersect,list(rownames(coef(cvfit)$'1')[matrix(coef(cvfit)$'1') != 0],rownames(coef(cvfit)$'2')[matrix(coef(cvfit)$'2') != 0],rownames(coef(cvfit)$'3')[matrix(coef(cvfit)$'3') != 0])))
返回 1。
对于 lambda.1se,Nonzero = 9 代表什么,以及如何在 type.multinomial = "ungrouped"
时恢复这些变量名称和相应系数(cv.glmnet()
时的默认设置 family = "multinomial"
)?
谢谢
解决方法
set.seed(1839)
X <- replicate(10,rnorm(100))
y <- X[,1] + rnorm(100)
library(glmnet)
mod <- cv.glmnet(X,y)
as.data.frame(as.matrix(coef(mod$glmnet.fit,s = mod$lambda.1se)))
返回:
s1
(Intercept) 0.1072691
V1 0.6947232
V2 0.0000000
V3 0.0000000
V4 0.0000000
V5 0.0000000
V6 0.0000000
V7 0.0000000
V8 0.0000000
V9 0.0000000
V10 0.0000000
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。