【问题标题】:How to recover non-zero coefficients from glmnet multinomial?如何从 glmnet 多项式中恢复非零系数?
【发布时间】:2021-09-26 18:53:23
【问题描述】:

来自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,非零 = 9 代表什么?当type.multinomial = "ungrouped"family = "multinomial" 时默认设置cv.glmnet())时,我如何恢复这些变量名称和相应的系数?

谢谢

【问题讨论】:

    标签: r multiclass-classification glmnet multinomial


    【解决方案1】:
    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
    

    【讨论】:

    • 嗨,马克,感谢您的回复。我在原始问题中不够具体。当 type.multinomial 参数设置为“未分组”(默认设置为“分组”)时,这种情况对于多项分类是唯一的。
    猜你喜欢
    • 2019-07-25
    • 2020-01-27
    • 1970-01-01
    • 2015-09-06
    • 2021-09-22
    • 2016-01-09
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多