Кто-нибудь знает, как cv.glmnet (в glmnet R) или LassoCV (scikit-learn) выбирает последовательность констант регуляризации (лямбда-выражения), которые они используют при перекрестной проверке? Большое спасибо!
последовательность лямбда по умолчанию в glmnet для перекрестной проверки
Ответы (1)
Согласно Friedman, Hastie & Tibshirani (2010), «стратегия состоит в том, чтобы выбрать минимальное значение lambda_min = epsilon * lambda_max и построить последовательность K значений lambda, уменьшающихся от lambda_max до lambda_min по логарифмической шкале. Типичные значения: эпсилон = 0,001 и K = 100».
В следующем примере генерируются данные, вычисляется лямбда-путь и сравнивается с glmnet:
## Load library and generate some data to illustrate:
library("glmnet")
set.seed(1)
n <- 100
x <- matrix(rnorm(n*20), n, 20)
y <- rnorm(n)
## Standardize variables: (need to use n instead of (n-1) as denominator)
mysd <- function(z) sqrt(sum((z-mean(z))^2)/length(z))
sx <- scale(x, scale = apply(x, 2, mysd))
sx <- as.matrix(sx, ncol = 20, nrow = 100)
## Calculate lambda path (first get lambda_max):
lambda_max <- max(abs(colSums(sx*y)))/n
epsilon <- .0001
K <- 100
lambdapath <- round(exp(seq(log(lambda_max), log(lambda_max*epsilon),
length.out = K)), digits = 10)
lambdapath
## Compare with glmnet's lambda path:
fitGLM <- glmnet(sx, y)
fitGLM$lambda
Обратите внимание, что glmnet не вычисляет решения для всех 100 (по умолчанию) значений лямбда, а останавливается раньше. Не знаю, каковы правила остановки.
См. также Как glmnet вычисляет максимальное значение лямбда
Фридман Дж., Хасти Т. и Тибширани Р. (2010). Пути регуляризации для обобщенных линейных моделей через координатный спуск. Журнал статистического программного обеспечения, 33(1), 1.
y
, а затем вычисляете lambda_max
. Согласно пакету, y
только центрируется, а не масштабируется???
- person mert; 29.05.2018
sy <- as.vector(scale(y, scale = mysd(y)))
на sy <- y
, вычисленные lambdapath
и fitGLM$lambda
все равно будут равны.
- person Marjolein Fokkema; 29.05.2018
y
сейчас.
- person Marjolein Fokkema; 04.05.2021