微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 glmnet 多项式中恢复非零系数?

如何解决如何从 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 举报,一经查实,本站将立刻删除。