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

时间:2020-02-14 17:09:19

标签: r cross-validation r-caret glmnet lasso-regression

正如标题所示,我的目标是使用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]]]

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您查看警告:

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

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

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

def payment(arg):
    letters = {'B': 2.00, 'W': 2.50, 'S': 1.50}
    order = 0
    for item, value in letters.items():
        order += arg.count(item)*value

    return(order)

print(payment('BBSWS'))

您可以检查超级参数here

相关问题