运行脊时lambda出错

时间:2017-11-22 01:07:26

标签: r glmnet

我正在运行以下代码,但不断收到错误消息。代码来自ISLR网站。

library(ISLR)
Hitters=na.omit(Hitters)
x=model.matrix(Salary~.,Hitters)[,-1]
y=Hitters$Salary
library(glmnet)
ridge.mod=glmnet(x,y,alpha=0,lambda=grid)

错误讯息:

Error in lambda < 0 : comparison (3) is possible only for atomic and list types

我真的很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

ridge.mod=glmnet(x,y,alpha=0,lambda=grid)

grid是R函数的名称(尝试&#39;?grid&#39;),但glmnet期望lambda值的向量。

如果你在没有提供lambda序列的情况下运行glmnet,glmnet库会使用自己的启发式来选择lambda:

ridge.mod=glmnet(x,y,alpha=0)

您也可以提供自己的序列:

ridge.mod=glmnet(x,y,alpha=0, lambda=seq(10, 1000, 1))

但glmnet帮助建议反对它。

  

lambda用户提供的lambda序列。典型的用法是拥有   程序根据nlambda和。计算自己的lambda序列   lambda.min.ratio。提供lambda值会覆盖此值。警告:   小心使用。避免为lambda提供单个值(for   CV使用后预测(而不是)。供应而不是   减少λ值的序列。 glmnet依赖于它的温暖   从速度开始,它通常比整个路径更快   计算单一的契合度。

(请注意,上面的&#39; seq(10,1000,1)&#39;只是一个显示正确语法的示例。)