随机森林 - 插入符号 - 时间序列

Posted

技术标签:

【中文标题】随机森林 - 插入符号 - 时间序列【英文标题】:Random Forest - Caret - Time Series 【发布时间】:2015-10-08 06:45:25 【问题描述】:

我有一个时间序列(苹果股票价格-收盘价-变成一个数据框以使用插入符号拟合随机森林。我滞后了 1 天、2 天和 6 天。我想预测接下来的 2 天。提前两步预测。但是caret使用不允许参数h作为forecast函数的predict函数。而且我看到有些人试图提出参数n.ahead但不起作用对我来说。有什么建议吗?查看代码

df<-data.frame(APPL)
df$f1<-lag(df$APPL,1)
df$f2=lag(df$APPL,2)
df$f3=lag(df$APPL,6)

# change column names

colnames(df)<-c("price", "price_1", "price_2", "price_6")

# remove rows (days) with NA.
df<-df[complete.cases(df),]

fitControl <- trainControl(
  method = "repeatedcv",
  number = 10,
  repeats = 1,
  classProbs = FALSE,
  verboseIter = TRUE,
  preProcOptions=list(thresh = 0.95, na.remove = TRUE, verbose = TRUE))

set.seed(1234)

rf_grid= expand.grid(mtry = c(1:3))

fit <- train(price~.,
                 data=df,
                 method="rf",
                 preProcess=c("center","scale"),
                 tuneGrid = rf_grid,
                 trControl=fitControl,
                 ntree = 200,
                 metric="RMSE")


nextday <- predict(fit,`WHAT GOES HERE?`)

如果我只将predict(fit)用作newdata整个数据集。我认为这是错误的。我正在考虑的另一件事是做一个循环。预测提前 1 步,因为我有 1,2 和 6 天前的数据。并且提前 2 步的填充预测 1 天前的“单元格”与我之前所做的预测。

【问题讨论】:

第一个建议,您需要添加一个可重现的示例,否则我们无法测试代码来提供帮助。第二个建议,您的脚本无论如何都会导致错误,因为您没有在 colnames 函数行关闭双引号。第三个建议,predict.randomForest 函数没有 n.ahead 参数。第四个建议,我不明白为什么机器学习算法应该表现得像预测,这是一种时间序列的计量经济学算法。 惊人的反馈@LyzanderR 谢谢! ... 所以时间序列“滚动窗口”和 RF 可以很好地用于时间序列预测。但是您只能选择一个目标 pr model.fit。简单地将特征输入为第 -1、-2 和 -6 天不足以构建有用的模型。这将是预测性的,但由于股票不是静止的,所以以一种毫无意义的方式进行。 “我预测明天的苹果价格会接近今天,等等......”。您需要转换数据以记录差异或相对变化。您想知道的是股票明天上涨的机会是否增加,而您不想比其他交易代理更确定地知道这一点。 @Soren 这是真的。我正在考虑带来外部功能。但它们仅适用于“训练”,而不适用于“测试”(或预测)。当然,除非我也为它们使用预测值。想象一下,GDP 增长,或者类似的东西。我在考虑自回归,因为我能够拥有完整的变量面板。但你是对的。 【参考方案1】:

目前,您无法将其他选项传递给底层的 predict 方法。不过,有一个proposed change 可能会启用此功能。

在您的情况下,您应该为 predict 函数提供一个数据框,该数据框具有适用于接下来几个观察的预测变量。

【讨论】:

【参考方案2】:
#1:: colnames(df)<-c("price","price_1","price_2","price_6") ;; "after price6
#2:: Predictstats is a generic function for predictions from the results of various model fitting functions

::predict(model object , dataframe)
we have 3 cases here for dataframe ::
case 1 :: train data::on which model is fitted :: Insample prediction
case 2 :: test data::Out of sample prediction
case 3 :: forecasted  data :: forecasted values of the independent variables : we get the forecasted values of the dependent variable according to the model

The column names in case 2 & 3 should be same as column names of the train data

【讨论】:

这篇文章真的很难读。请问能重新格式化一下吗? 希望对您有所帮助

以上是关于随机森林 - 插入符号 - 时间序列的主要内容,如果未能解决你的问题,请参考以下文章

使用并行训练带有插入符号的随机森林

如何使用插入符号函数来实现与此 for 循环相同的结果?分类随机森林插入符号

在 Macbook 中并行执行随机森林的小速度增益(使用 R,插入符号)

使用插入符号的完全可重现的并行模型

如何绘制从使用 R 中的“caret”包创建的随机森林中选择的树

R:使用带有插入符号的游侠,tuneGrid 参数