r0byn 2024-06-14 21:45 采纳率: 50%
浏览 14
已结题

R语言建立随机森林模型出现的问题

我在知网上找到一篇用随机森林模型来预测股指期货价格的论文,在用R Studio复刻的过程中出现了一些问题。

如图。

img

我已经把数据集分成了训练集和测试集,也算出来我使用的数据的收盘价序列滞后阶数为20。

问题在于:“用过去25天的所有变量数据作为输入特征,未来1天的收盘价作为标签,进行模型训练。”

这句话我真的看不懂什么意思,一点思路都没有,论文里也没有更具体的解释,我应该怎么进行下去呢?求各位朋友的解答,非常感谢!!

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-14 21:45
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    面对你提出的问题,关键在于理解如何构建时间序列预测模型中的特征和目标变量。在随机森林模型中,尤其是处理时间序列数据时,我们通常会利用过去一段时间内的数据来预测未来的某个值。具体到你的案例,就是使用过去25天的数据来预测第26天的收盘价。以下是详细的步骤和代码示例,帮助你理解和实现这一过程:

    步骤 1: 准备数据

    首先,确保你的数据已经按照时间顺序排列,并且你已经有了一个DataFrame,其中包含至少以下列:Open, Close, High, Low, Volume, 和 Turnover。假设你的数据集名为data,并且已经按照日期排序。

    步骤 2: 创建滞后特征

    接下来,你需要为每个预测变量创建滞后版本。例如,如果我们要使用过去25天的数据,那么对于每一个变量,如Close,你需要创建从Lag1Lag25的滞后版本。

    library(dplyr)
    
    # 假设 data 是你的原始数据集
    lags <- 25 # 滞后阶数
    data_lagged <- data %>%
      mutate_at(vars(Open, Close, High, Low, Volume, Turnover), ~ c(., lag(.x, 1):lag(.x, lags))) %>%
      na.omit() # 移除NA值,因为滞后操作会产生NA
    
    # 重命名滞后特征
    names(data_lagged) <- gsub("X", "", names(data_lagged))
    names(data_lagged)[grep("lag", names(data_lagged))] <- paste0("Lag_", 1:lags)
    

    步骤 3: 划分训练集和测试集

    你已经提到了9:1的比例,这意味着如果你有2569条数据,大约2312条用于训练,剩下的257条用于测试。

    train_size <- floor(0.9 * nrow(data_lagged))
    train_data <- data_lagged[1:train_size, ]
    test_data <- data_lagged[(train_size+1):nrow(data_lagged), ]
    

    步骤 4: 构建随机森林模型

    现在,你可以使用训练数据集来构建随机森林模型。目标是预测Close变量,而特征则是所有其他变量,包括滞后版本的Open, Close, High, Low, Volume, 和 Turnover

    library(randomForest)
    
    model <- randomForest(Close ~ ., data = train_data, importance = TRUE)
    

    步骤 5: 预测并评估模型

    使用测试数据集对模型进行预测,并评估其性能。

    predictions <- predict(model, newdata = test_data)
    rmse <- sqrt(mean((test_data$Close - predictions)^2))
    print(paste("RMSE:", rmse))
    

    以上步骤和代码应该能帮助你理解并实现论文中描述的过程。如果你在执行过程中遇到任何具体错误或疑问,可以进一步提供错误信息或具体问题的细节,以便进行更深入的讨论。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 创建了问题 6月14日