#r #lambda #regression #lasso-regression
#r #лямбда #регрессия #лассо-регрессия
Вопрос:
Я пытаюсь выполнить несколько регрессий ЛАССО в R, используя следующий код:
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
приводит к a Large list (20 elements, 1MB)
с 20 одинаковыми выводами ЛАССО, но для 20 переменных, а coefficients
вывод — это только значимые переменные в каждом случае.
Я заметил, что для одного и того же набора данных результаты не всегда одинаковы — может быть, из-за изменения значений лямбды при каждом запуске? не уверен. Я хочу сделать так, чтобы мой код находил одни и те же lambda.min
‘ы и всегда давал одни и те же результаты при запуске набора данных. Я считаю, что set.seed () может управлять этим, но не может понять, как его включить.
Как я могу всегда заставлять его печатать одни и те же выходные данные для определенного набора данных?
Ответ №1:
Я получил его для получения одних и тех же lambda.min
значений от запуска к запуску, просто поместив set.seed()
перед списком. Затем вы устанавливаете начальное значение для случайных розыгрышей при выполнении перекрестной проверки.
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])
Комментарии:
1. может ли количество set.seed повлиять на эффективность результатов? Я имею в виду, есть ли оптимальное начальное значение?
2. Другое значение set.seed приведет к другому результату, но этот результат будет тем же, если вы снова запустите функцию. Результаты по своей сути являются переменными из-за случайности при перекрестной проверке.