R 中多个 LASSO 回归的未更改的“lambda.min”值

Unchanged `lambda.min` values for multiple LASSO regressions in R

我正在尝试使用以下代码在 R 中执行多个 LASSO 回归:

library(readxl)
data <-read_excel("data.xlsx") # 20x20 matrix  
library(glmnet)
    library(coefplot)
    
    A <- as.matrix(data)
    results <- lapply(seq_len(ncol(A)), function(i) {
      list(
    fit_lasso = glmnet(A[, -i], A[, i], standardize = T, alpha = 1), 
    cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = 1)
  )
})
coefficients <- lapply(results, function(x, fun) fun(coef(x$cvfit, s = "lambda.min")), function(x) x[x[, 1L] != 0L, 1L, drop = FALSE])

我的输出 results 导致 Large list (20 elements, 1MB) 具有 20 个相同的 LASSO 输出,但对于 20 个变量和 coefficients 输出只是每种情况下的重要变量。

我注意到对于相同的数据集,结果并不总是相同的——可能是因为每个 运行 中的 lambda 值都在变化?不确定。我想让我的代码找到相同的 lambda.min,并在我 运行 数据集时始终给出相同的结果。我相信 set.seed() 可能会管理它,但无法弄清楚如何充分包含它。

如何让它始终为特定数据集打印相同的输出?

我只需将 set.seed() 放在列表前,就可以从 运行 运行 中生成相同的 lambda.min 值。然后,您要为 cross-validation 运行 的随机抽奖设置种子。

library(readxl)
data <-read_excel("data.xlsx") # 20x20 matrix  
library(glmnet)
    library(coefplot)
    
    A <- as.matrix(data)
 set.seed(54234)   
 results <- lapply(seq_len(ncol(A)), function(i) {
      list(
    fit_lasso = glmnet(A[, -i], A[, i], standardize = T, alpha = 1), 
    cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = 1)
  )
})
coefficients <- lapply(results, function(x, fun) fun(coef(x$cvfit, s = "lambda.min")), function(x) x[x[, 1L] != 0L, 1L, drop = FALSE])