请问有人知道 cv.glmnet (在 R 的 glmnet 中) 或 LassoCV (scikit-learn 中的) 如何选择一系列正则化常数 (lambda),并在交叉验证中使用它们吗?非常感谢!
请问有人知道 cv.glmnet (在 R 的 glmnet 中) 或 LassoCV (scikit-learn 中的) 如何选择一系列正则化常数 (lambda),并在交叉验证中使用它们吗?非常感谢!
## 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
Friedman, J., Hastie, T., & Tibshirani, R. (2010).通过坐标下降法进行广义线性模型的正则化路径。《统计软件学报》,33(1),1。
y
向量进行了归一化,然后计算了 lambda_max
。根据包的说明,y
只被居中而不是缩放??? - mertsy <- as.vector(scale(y, scale = mysd(y)))
替换为sy <- y
,则计算出的lambdapath
和fitGLM$lambda
仍然相等。 - Marjolein Fokkemay
的归一化处理。 - Marjolein Fokkema