【问题标题】:How get coefs name from glmnet in R?如何从 R 中的 glmnet 获取 coefs 名称?
【发布时间】:2017-01-25 21:57:33
【问题描述】:

我在 R 中用 glmnet 做套索。我有套索系数 out$beta

输入:

x1  0.5744207722
x2 -0.3575682570
x3 -0.0995794334

如何提取变量名?

期望的输出: x1, x2,x3

我尝试了什么

  1. $
  2. as.data.frame
  3. as.matrix

但它们都没有将coefs 转换为 n 行 2 列矩阵。它们仍然是一个向量,x1 0.5744207722

我无法手动完成。我有 1000 多个变量和更多模型要运行。而且我不会不把它写在我的磁盘上,然后再读回来。

【问题讨论】:

  • 您查看过glmnet 的文档吗?第一个示例向您展示了如何使用coef() 提取每个变量的系数。
  • 我想要名字 x1, x2 而不是 coefs 0.5744207722, -0.3575682570
  • 然后rownames(coef(fit))。如果这不能满足您的要求,请给出一个包含输入和所需输出的可重现示例。
  • 如果你自己尝试,它会返回Error: $ operator is invalid for atomic vectors。问题已修改。
  • 原因是 glmnet 返回一个向量而不是矩阵或数据框。

标签: r glmnet lasso-regression


【解决方案1】:

根据您上面的输入,您似乎指定了一个带有单个 lambda 值的 glmnet 调用。

在这种特殊情况下,您可以像这样提取系数的名称:names(out$beta[, 1][out$beta[, 1] != 0])。请注意,仅提取非零 beta 的名称,这在此处应用 Lasso 时是有意义的,因为 Lasso 执行特征缩减。

一个最小可重现的例子是这样的: out <- glmnet(as.matrix(mtcars[-1]), mtcars[["mpg"]], lambda = 1)

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2017-04-16
    • 2015-12-24
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多