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

yfwxisqw  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(165)

工作示例来自www.example.com 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"(当family = "multinomial"时默认设置为cv.glmnet())时,我如何恢复这些变量名和相应的系数?
谢谢

y0u0uwnf

y0u0uwnf1#

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
guicsvcw

guicsvcw2#

从我所能告诉的计算可能是如下:

  • 计算每组非零系数的数量(不包括截距)
  • 报告各组的最小结果(不包括结果为零的任何组)

在您的情况下,其中两个组有9个非零系数(不包括截距),另外10个组有9个非零系数,因此报告9个。
一种确定的方法是检查代码-但我没有这样做。

相关问题