【问题标题】:Extract data from glmnet output data从 glmnet 输出数据中提取数据
【发布时间】:2018-05-23 18:40:36
【问题描述】:

我正在尝试使用 glmnet 包进行功能选择。我一直在运行glmnet。但是,我很难理解输出。我的目标是获取基因列表及其各自的系数,以便我可以根据它们在分离我的两组标签时的相关程度对基因列表进行排名。

x = manual_normalized_melt[,colnames(manual_normalized_melt) %in% 
sig_0_01_ROTS$Gene]
y = cellID_reference$conditions

glmnet_l0 <- glmnet(x = as.matrix(x), y = y, family = "binomial",alpha = 1)

关于我如何从这里开始的任何提示/说明?我知道我想要的数据在 glmnet_l0 中,但我有点不确定如何提取它。

另外,有人知道是否有办法在 R 中使用 L0-norm 进行特征选择?

非常感谢!

【问题讨论】:

  • 你试过str(glmnet_l0)吗?

标签: r extract glmnet


【解决方案1】:

下面是glmnet中的一些方法:

首先是一些数据,因为您没有发布任何数据(虹膜数据在物种中有两个级别):

data(iris)
x <- iris[,1:4]
y <- iris[,5]
y[y == "setosa"] <- "virginica"
y <- factor(y)

首先运行一个交叉验证模型,看看什么是最好的 lambda:

library(glmnet)
model_cv <- cv.glmnet(x = as.matrix(x),
                      y = y,
                      family = "binomial",
                      alpha = 1,
                      nfolds = 5,
                      intercept = FALSE)

在这里,我选择了 5 折交叉验证来确定最佳 lambda。

最好也看一下 lambda 的系数:

coef(model_cv, s = "lambda.min")
#output
#5 x 1 sparse Matrix of class "dgCMatrix"
                      1
(Intercept)   .        
Sepal.Length -0.7966676
Sepal.Width   1.9291364
Petal.Length -0.9502821
Petal.Width   2.7113327

在这里您可以看到没有删除任何变量(或者它们将有 . 而不是系数)。如果所有特征都在同一尺度上(如基因表达数据),您可以考虑将standardize = FALSE 作为参数添加到 glmnet 调用,因为它默认设置为TRUE。至少我在建模表达式时会这样做。

查看最佳 lambda:

model_cv$lambda[which.min(model_cv$cvm)]

现在您可以使用所有数据制作模型:

glmnet_l0 <- glmnet(x = as.matrix(x),
                    y = y,
                    family = "binomial",
                    alpha = 1,
                    intercept = FALSE)

您可以在 lambda 刻度上绘制它并添加一条垂直线来描绘最佳 lambda:

plot(glmnet_l0, xvar = "lambda")
abline(v = log(model_cv$lambda[which.min(model_cv$cvm)]))

在这里可以看到系数几乎没有缩小,在最好的情况下是 lambda。

对于更高维度的数据,您会看到许多系数轨迹在最佳 lambda 开始之前趋向 0 和许多 .在 coef 矩阵中。

当使用predict.glmnet 时设置s = model_cv$lambda[which.min(model_cv$cvm)] 否则它将为所有测试的 lambda 生成预测。

同时检查这个post 它包含一些其他相关信息。

【讨论】:

    【解决方案2】:

    不久前,我将 glmnet 包装在一个包中以进行功能选择,您可以查看 at the code(从第 89 行开始),也可以使用 devtools::install_github('mlampros /功能选择')。我还在blog post 中解释了它是如何工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多