微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

岭回归的推荐函数是什么

如何解决岭回归的推荐函数是什么

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

我正在 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 举报,一经查实,本站将立刻删除。