正如标题所暗示的,我的目标是使用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]]]
有任何建议吗?
如果您查看警告:
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