LASSO模型的时间序列交叉验证

问题描述 投票:0回答:1

正如标题所暗示的,我的目标是使用L1罚分(套索)执行时间序列交叉验证。由于数据帧是时间序列格式,因此显然,时间序列分析的结果应该比常规简历更合适。

这是我尝试的代码行

library(caret)
library(ggplot2)
library(pls)
economics
timeSlices <- createTimeSlices(1:nrow(economics), 
                               initialWindow = 36, horizon = 12, fixedWindow = FALSE)
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]

这允许为训练集创建两个切片(总是再获得一个观察值),同时保持测试集的长度不变。问题出现在这里

plsFitTime <- train(unemploy ~ pce + pop + psavert,
                data = economics[trainSlices[[1]],],
                method = "glmnet",
                alpha = 1)

这里是错误

出问题了;所有RMSE指标值均丢失:

      RMSE        Rsquared        MAE     
 Min.   : NA   Min.   : NA   Min.   : NA  
 1st Qu.: NA   1st Qu.: NA   1st Qu.: NA  
 Median : NA   Median : NA   Median : NA  
 Mean   :NaN   Mean   :NaN   Mean   :NaN  
 3rd Qu.: NA   3rd Qu.: NA   3rd Qu.: NA  
 Max.   : NA   Max.   : NA   Max.   : NA  
 NA's   :9     NA's   :9     NA's   :9    
Error: Stopping
In addition: Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :
  There were missing values in resampled performance measures.

我真的不明白这可能是什么问题。

我的最终目标是执行

pred <- predict(plsFitTime,economics[testSlices[[1]],])
true <- economics$unemploy[testSlices[[1]]]

有任何建议吗?

r cross-validation r-caret glmnet lasso-regression
1个回答
0
投票

如果您查看警告:

50:Resample17的模型拟合失败:alpha = 0.55,lambda = 42.28(函数(x,y,family = c(“高斯”,“二项式”,“泊松”,:形式参数“ alpha”与多个实际参数匹配]

默认情况下,glamnet的训练是在lambda和alpha上完成的。您指定的Alpha与插入符号生成的Alpha冲突。

如果需要固定的Alpha,则应在tuneGrid中指定它。

t_grid = expand.grid(lambda=seq(0,1,by=0.1),alpha=1)
plsFitTime <- train(unemploy ~ pce + pop + psavert,
                    data = economics[trainSlices[[1]],],
                    method = "glmnet",
                    tuneGrid = t_grid)

您可以检查超级参数here

© www.soinside.com 2019 - 2024. All rights reserved.