【发布时间】:2013-08-30 07:16:30
【问题描述】:
我正在尝试使用 LASSO 进行变量选择,并尝试使用 glmnet 包在 R 中实现。这是我目前写的代码:
set.seed(1)
library(glmnet)
return = matrix(ret.ff.zoo[which(index(ret.ff.zoo) == beta.df$date[1]),])
data = matrix(unlist(beta.df[which(beta.df$date == beta.df$date[1]),][,-1]), ncol = num.factors)
dimnames(data)[[2]] <- names(beta.df)[-1]
model <- cv.glmnet(data, return, standardize = TRUE)
coef(model)
这是我第一次运行时得到的:
> coef(model)
15 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 0.009159452
VAL .
EQ .
EFF .
SIZE 0.018479078
MOM .
FSCR .
MSCR .
SY .
URP .
UMP .
UNIF .
OIL .
DEI .
PROD .
但是,这是我再次运行相同代码时得到的结果:
> coef(model)
15 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 0.008031915
VAL .
EQ .
EFF .
SIZE 0.021250778
MOM .
FSCR .
MSCR .
SY .
URP .
UMP .
UNIF .
OIL .
DEI .
PROD .
我不确定模型为什么会这样。如果系数在每次运行时都发生变化,我将如何选择最终模型?它是否在每次运行时使用不同的调整参数 $\lambda$?我以为cv.glmnet默认使用model$lambda.1se?!
我刚刚开始了解这个包,如果我能得到任何帮助,我将不胜感激!
谢谢!
【问题讨论】:
-
模型不是确定性的。在模型拟合之前尝试运行
set.seed(1),看看是否得到相同的答案。 -
感谢您的尝试!我以为这会解决它,但它没有..
-
@nograpes 它的工作原理是选择相同的预测变量集。但问题是系数在每次运行时仍然会发生变化......
-
尝试运行
cv.glmnet帮助页面中的示例脚本。您应该能够两次获得相同的系数。您确定要在两次运行之前重新运行set.seed(1)吗? -
知道了!谢谢!您能否发表您的评论作为答案,以便我接受?非常感谢您的帮助。
标签: r regression glmnet