gpt4 book ai didi

glmnet - glmnet 中用于交叉验证的默认 lambda 序列

转载 作者:行者123 更新时间:2023-12-02 01:29:22 24 4
gpt4 key购买 nike

有人知道 cv.glmnet (在 R 的 glmnet 中)或 LassoCV (scikit-learn)如何选择在交叉验证中使用的正则化常量(lambda)序列吗?非常感谢!

最佳答案

根据 Friedman、Hastie 和 Tibshirani (2010) 的说法,策略是选择最小值 lambda_min = epsilon * lambda_max,并构建一个在对数尺度上从 lambda_max 到 lambda_min 递减的 K 个 lambda 值序列。典型值为 epsilon = 0.001 和 K = 100。'

以下示例生成数据,计算 lambda 路径并将其与 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 个(默认)lambda 值的解决方案,但它会提前停止。不确定停止规则是什么。

另请参阅How does glmnet compute the maximal lambda value

<小时/>

Friedman, J.、Hastie, T. 和 Tibshirani, R. (2010)。通过坐标下降的广义线性模型的正则化路径。 统计软件杂志,33(1), 1.

关于glmnet - glmnet 中用于交叉验证的默认 lambda 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com