岭回归的推荐函数是什么

问题描述

我在问哪些函数更值得使用,因为与教科书计算相比,它们每次都给出不同的结果。

我正在 R 中使用岭回归。我可以使用三个函数,分别是 glmnetlm.ridge 或教科书计算。

我可以将 glmnet 结果作为教科书的计算结果。

p.tmp <- 5
n.tmp <- 30

set.seed(123)
X=scale(matrix(rnorm(n.tmP*p.tmp),ncol = p.tmp))
Y=scale(rnorm(n.tmp))

set.seed(123) 
ridge.fit.cv <- cv.glmnet(X,Y,alpha = 0,standardize = FALSE,intercept = FALSE)
ridge.fit.lambda <- ridge.fit.cv$lambda.1se
ridge_mod <- coef(glmnet(X,alpha=0,lambda = ridge.fit.lambda) )[-1]
###############################
ridge.coef.DEF = solve(t(X) %*% X + n.tmP* ridge.fit.lambda * diag(p.tmp)) %*% t(X) %*% Y
cbind(glmnet=c(ridge_mod),textbook=c(ridge.coef.DEF),lm.ridge=c(coef( lm.ridge(Y~X - 1,lambda=ridge.fit.lambda))))

结果如下

          glmnet      textbook     lm.ridge
X1  3.040157e-04  3.092039e-04  0.009102455
X2  9.805261e-04  9.972422e-04  0.028596273
X3  1.514714e-04  1.540631e-04  0.004855324
X4  1.721871e-04  1.751177e-04  0.004789519
X5 -4.282657e-05 -4.355457e-05 -0.001143931

或者我也可以将lm.ridge结果作为教科书计算如下

set.seed(123) 
ridge.fit.cv <- cv.glmnet(X,lambda = ridge.fit.lambda) )[-1]
###############################
ridge.coef.DEF = solve(t(X) %*% X + ridge.fit.lambda * diag(p.tmp)) %*% t(X) %*% Y
cbind(glmnet=c(ridge_mod),lambda=ridge.fit.lambda*(30/29)))))

结果为

          glmnet     textbook     lm.ridge
X1  3.040157e-04  0.008815056  0.008815056
X2  9.805261e-04  0.027715213  0.027715213
X3  1.514714e-04  0.004692398  0.004692398
X4  1.721871e-04  0.004649196  0.004649196
X5 -4.282657e-05 -0.001112091 -0.001112091

我的问题是我应该相信哪种方法,因为当您注意到结果不同时。

我应该将文本计算为 glmnet 还是 lm.ridge

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)