R语言glmnet中exact=TRUE参数使用报错,如何传入penalty.factor?
解决glmnet中
exact=TRUE时传入penalty.factor的问题 我来帮你搞定这个报错问题!首先得搞明白为啥会报错:当你用exact=TRUE调用coef.glmnet()的时候,这个选项会让函数重新跑一遍glmnet拟合,来精准计算你指定的s=0.03对应的系数值——所以它必须拿到你最初拟合模型时用的所有关键原料:原始的x、y数据,还有你当时设置的penalty.factor参数(如果自定义过的话)。
结合你的代码,给你具体的修改方案:
第一步:先确认你最初的拟合参数
你之前写的penalty=variable.list$penalty要注意一下——glmnet官方的参数名是penalty.factor,大概率是你笔误了?如果你的variable.list$penalty就是用来设置惩罚因子的,那先把拟合代码的参数名改对:
fit = glmnet(as.matrix(x_values), as.matrix(y_values), penalty.factor = variable.list$penalty)
第二步:正确调用coef()获取精确系数
接下来调用coef()的时候,一定要把x、y和penalty.factor都传进去,代码改成这样:
coef.exact = coef(fit, s = 0.03, exact = TRUE, x = as.matrix(x_values), y = as.matrix(y_values), penalty.factor = variable.list$penalty)
再给你划几个重点
exact=TRUE的核心是重新拟合,所以缺了任何一个原始参数都不行,必须同时给x、y和penalty.factor。- 一定要保证这里传的
penalty.factor和你最初拟合模型时的完全一样,不然重新拟合出来的结果和原模型对不上,那exact=TRUE就没意义了。 - 如果之前你真的是用了
penalty这个参数(而不是penalty.factor),那得检查一下——glmnet主函数里根本没有叫penalty的参数,可能是把lambda或者penalty.factor搞混了,得先把这个理清楚哦。
内容的提问来源于stack exchange,提问作者itthrill
相关产品推荐
相关产品推荐

