【问题标题】:Lambda Issue, or cross validationLambda 问题或交叉验证
【发布时间】:2023-03-04 04:59:01
【问题描述】:

我正在使用glmnet 包的 LASSO 进行双重交叉验证,但是当我绘制结果时,我得到的 lambda 为 0 - 150000,这在我的情况下是不现实的,不确定我在做什么错,有人可以指出我在正确的方向。提前致谢!

calcium = read.csv("calciumgood.csv", header=TRUE)
dim(calcium)
n = dim(calcium)[1]
calcium = na.omit(calcium)
names(calcium)

library(glmnet)  # use LASSO model from package glmnet 
lambdalist = exp((-1200:1200)/100)  # defines models to consider


fulldata.in = calcium
x.in = model.matrix(CAMMOL~. - CAMLEVEL - AGE,data=fulldata.in)
y.in = fulldata.in[,2]
k.in = 10 
n.in = dim(fulldata.in)[1]
groups.in = c(rep(1:k.in,floor(n.in/k.in)),1:(n.in%%k.in))  
set.seed(8)
cvgroups.in = sample(groups.in,n.in)  #orders randomly, with seed (8) 
#LASSO cross-validation
cvLASSOglm.in = cv.glmnet(x.in, y.in, lambda=lambdalist, alpha = 1, nfolds=k.in, foldid=cvgroups.in)
plot(cvLASSOglm.in$lambda,cvLASSOglm.in$cvm,type="l",lwd=2,col="red",xlab="lambda",ylab="CV(10)")
whichlowestcvLASSO.in = order(cvLASSOglm.in$cvm)[1];     min(cvLASSOglm.in$cvm)
bestlambdaLASSO = (cvLASSOglm.in$lambda)[whichlowestcvLASSO.in];     bestlambdaLASSO
abline(v=bestlambdaLASSO)
bestlambdaLASSO  # this is the lambda for the best LASSO model
LASSOfit.in = glmnet(x.in, y.in, alpha = 1,lambda=lambdalist)  # fit the model across possible lambda
LASSObestcoef = coef(LASSOfit.in, s = bestlambdaLASSO); LASSObestcoef # coefficients for the best model fit

【问题讨论】:

  • 你能告诉我在哪里可以得到calciumgood.csv吗?

标签: r glmnet


【解决方案1】:

我找到了您所指的数据集 Calcium, inorganic phosphorus and alkaline phosphatase levels in elderly patients

基本上数据是“脏”的,这可能是算法不能正确收敛的原因。例如。有771 岁的患者,有12 用于男性和女性,有22 用于性别编码等。

至于你的情况,你只删除了NAs。

您还需要检查data.frame 导入的类型。例如。它可以作为整数(性别、实验室和年龄组)导入,而不是因素,这会影响模型。

我认为你需要: 1) 清理数据; 2) 如果不起作用,请提交 *.csv 文件

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 2013-01-24
    • 2021-05-24
    • 2012-05-18
    • 2015-01-13
    • 2013-01-03
    • 2015-09-26
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多