【问题标题】:randomForest forecast R随机森林预测 R
【发布时间】:2019-05-04 00:36:41
【问题描述】:

我正在尝试使用随机森林进行时间序列投影。根据下面的代码,我用 141 个观测值对一系列数据的最后 12 个观测值进行了预测。

premium<-read.table('https://raw.githubusercontent.com/arthurlula/Econometrics/master/premio.txt')
    pr<-premium[,1]
    pr<-pr[-c(1:48)] #my data

    train<-ts(pr[-c(130:141)],start=2007,frequency = 12) #my first 129 obs
    test<-ts(pr[130:141],start=c(2017,10),frequency = 12) #my last 12 obs
    regressor = randomForest(formula=train~.,
                             data=train,
                             ntree=100) #model
    y_pred = predict(regressor,newdata = test) #predict last 12 obs
    grab<-melt(c(train,y_pred))
    plot(grab[,1],type='l') #plot predicted
    lines(as.numeric(pr),col='red') #plot original

比较原始序列和预测序列的图表是这样的: forecast

它显示了非常好的准确性,这让人怀疑我做错了什么。如果不放置测试向量,就没有办法投影最后 12 个观察值吗?您将如何预测尚未发生的几个月?

【问题讨论】:

    标签: r time-series random-forest prediction


    【解决方案1】:

    问题出现在这一行:

    y_pred = predict(regressor,newdata = test)
    

    newdata 参数需要正确构造,即可以强制转换为数据框的内容,否则您将恢复原来的拟合,这就是为什么您会看到可疑的完整协议。尝试这些方法

    y_pred = predict(regressor,newdata = list(x=test)  )
     str(y_pred)
    #---------
     Named num [1:12] 47427468 27011517 1492706 29900252 28332662 ...
     - attr(*, "names")= chr [1:12] "1" "2" "3" "4" ...
    png()
        plot(train, xlim=c(2007,2019)  )  # original data 
        lines(seq(2018,2019, length.out =12), as.numeric(y_pred),col='red') #plot predicted
    dev.off()
    

    我不确定我是否正确注册了 train 和 y_pred 值,但这是你要摆弄的东西。 (我发现 R 的 ts 对象结构非常混乱。)

    【讨论】:

    • 不幸的是结果是一样的。你的预测和我的一样
    • 唯一的不同是我把原始序列绘制在一起,比较预测和官方结果
    猜你喜欢
    • 2014-08-07
    • 2021-03-21
    • 2014-08-17
    • 2019-01-22
    • 2019-07-10
    • 2021-06-23
    • 2019-02-19
    • 2021-07-12
    相关资源
    最近更新 更多