如何使 glmnet 给出与 glm 相同的结果?

机器算法验证 r 广义线性模型 网络
2022-03-09 16:55:05

什么参数化glmnet将给出与 相同的结果glm(如果重要的话,我主要对逻辑和线性回归感兴趣。)

2个回答

您将获得与glm通过alpha=1(默认)和lambda=0. 特别是最后一个:这意味着没有惩罚。

请注意,两者的拟合方法不同,因此尽管理论上您应该得到相同的结果,但根据您的数据可能仍然存在微小差异。

尽管 unregularizedglmnet 应该表现得像glm,在某些情况下glmnet会覆盖。lambda=0使用 baseglm函数更安全,尤其是在训练大量模型时。

x <- structure(c(0.028, 0.023, 0.0077, 0.14, 0.027, 0.084, 0.018, 
                 0.055, 0.0089, 0.016, 0.037, 0.043, 0.046, 0.031, 0.034, 0.056, 
                 0.016, 0.048, 0.013, 0.02, 0.067, 0.046, 0.058, 0.054, 0.036, 
                 0.043, 0.009, 0.12, 0.024, 0.018, 0.066, 0.046, 0.057, 0.054, 
                 0.036, 0.043, 0.009, 0.12, 0.024, 0.018, 0.051, 0.043, 0.047, 
                 0.045, 0.034, 0.04, 0.009, 0.085, 0.022, 0.016, 0.028, 0.023, 
                 0.0089, 0.14, 0.028, 0.084, 0.02, 0.055, 0.0089, 0.016, 0.067, 
                 0.049, 0.058, 0.055, 0.038, 0.043, 0.009, 0.12, 0.024, 0.018, 
                 0.067, 0.046, 0.058, 0.054, 0.036, 0.043, 0.009, 0.12, 0.024, 
                 0.018), .Dim = c(10L, 8L), .Dimnames = list(NULL, NULL))
y <- gl(2, 5)
fit <- glmnet::glmnet(x, y, family = "binomial", lambda = 0)
fit$lambda # should be 0 but actually infinity
Warning messages:
1: In lognet(xd, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  :
  one multinomial or binomial class has fewer than 8  observations; dangerous ground
2: from glmnet Fortran code (error code -1); Convergence for 1th lambda value not reached after maxit=100000 iterations; solutions for larger lambdas returned 
3: In getcoef(fit, nvars, nx, vnames) :
  an empty model has been returned; probably a convergence issue