gpt4 book ai didi

r - 当家庭 ="poisson"的 lambda=0 时,glmnet 缺乏收敛

转载 作者:行者123 更新时间:2023-12-04 18:08:58 25 4
gpt4 key购买 nike

在处理 glmnet 与 glm 时,我遇到了 lambda=0 和 family="poisson"的收敛问题。我的理解是,对于 lambda=0(和 alpha=1,默认值),答案应该基本相同。

下面的代码与 glmnet 帮助页面 (?glmnet) 上的泊松示例略有不同。唯一的变化是 nzc = p 这样所有变量都在真实模型中

N=1000; p=50
nzc=p
x=matrix(rnorm(N*p),N,p)
beta=rnorm(nzc)
f = x[,seq(nzc)]%*%beta
mu=exp(f)
y=rpois(N,mu)

#With lambda=0 glmnet throws the convergence error shown below
fit=glmnet(x,y,family="poisson",lambda=0)

#It works with default lambda passed in
# but estimates are quite different from glm.
fit=glmnet(x,y,family="poisson") #use default lambdas
fit2=glm(y~x,family="poisson")
plot(coef(fit2)[2:(p+1)],
coef(fit,s=min(fit$lambda))[2:(p+1)],
xlab="glm",ylab="glmnet")
abline(0,1)

#works fine with gaussian response and lambda=0 or default lambda
#glm and glmnet identical
mu = f
y=rnorm(N,mu)
fit=glmnet(x,y,family="gaussian",lambda=0)
fit2=glm(y~x)
plot(coef(fit2)[2:(p+1)], coef(fit)[2:(p+1)])
abline(0,1)

这是错误信息

Warning messages:
1: from glmnet Fortran code (error code -1); Convergence for 1th lambda value not reached after maxit=100000 iterations; solutions for larger lambdas returned
2: In getcoef(fit, nvars, nx, vnames) :an empty model has been returned; probably a convergence issue

更新:问题似乎在于当 family="poisson"时 glmnet 估计的截距与 lambda 本身的设置无关。

fit=glmnet(x,y,family="poisson")
#intercept should be close to 0
coef(fit)[1,]
#but it is huge
#passing in intercept=FALSE however generates the convergence error again
fit=glmnet(x,y,family="poisson", intercept=FALSE)

最佳答案

我认为您对 lambda 和 alpha 感到困惑。 alpha 是惩罚因子,设置为 0 会给你岭回归。通常它被设置为介于 0.1 和 1 之间的值。lambda 通常未设置,帮助页面上有一条警告不要将其设置为单个值:

WARNING: use with care. Do not supply a single value for lambda

我不知道为什么您认为套索惩罚应该与未惩罚的泊松模型相同。惩罚模型的全部意义在于较少受到普通回归模型的偏差和约束的影响。

关于r - 当家庭 ="poisson"的 lambda=0 时,glmnet 缺乏收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326096/

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