【问题标题】:Predict Future values by using OPERA package in R在 R 中使用 OPERA 包预测未来值
【发布时间】:2018-01-29 17:44:56
【问题描述】:

我一直在尝试理解 Pierre Gaillard 和 Yannig Goude 的 Opera“专家聚合在线预测”。我阅读了 Pierre Gaillard (http://pierre.gaillard.me/opera.html) 和 Rob Hyndman (https://robjhyndman.com/hyndsight/forecast-combinations/) 的两篇文章。但是,我不明白如何预测未来的价值。在 Pierre 的示例中,newY = Y 表示测试数据集 (Y

> tail(electric_load,5)
Time Day Month Year   NumWeek     Load    Load1      Temp     Temp1  IPI 

727  727  30    11 2009 0.9056604 63568.79 58254.42  7.220536 10.163839 91.3    88.4
728  728   7    12 2009 0.9245283 63977.13 63568.79  6.808929  7.220536 90.1    87.7
729  729  14    12 2009 0.9433962 78046.85 63977.13 -1.671280  6.808929 90.1    87.7
730  730  21    12 2009 0.9622642 66654.69 78046.85  4.034524 -1.671280 90.1    87.7
731  731  28    12 2009 0.9811321 60839.71 66654.69  7.434115  4.034524 90.1    87.7

我注意到,通过将 MLpol0 的权重乘以 X,我们得到与在线预测值相似的输出。

> weights <- predict(MLpol0, X, Y, type='weights')
> w<-weights[,1]*X[,1]+weights[,2]*X[,2]+weights[,3]*X[,3]
> predValues <- predict(MLpol0, newexpert = X, newY = Y, type='response')


 Test_Data predValues  w
620  65564.29 65017.11 65017.11
621  62936.07 62096.12 62096.12
622  64953.83 64542.44 64542.44
623  61580.44 60447.63 60447.63
624  71075.52 67622.97 67622.97
625  75399.88 72388.64 72388.64
626  65410.13 67445.63 67445.63
627  65815.15 62623.64 62623.64
628  65251.90 64271.97 64271.97
629  63966.91 61803.77 61803.77
630  64893.42 65793.14 65793.14
631  69226.32 67153.80 67153.80

但我仍然不确定如何在没有 newY 的情况下生成权重。也许我们可以使用作为 MLpol 输出的最终系数来预测未来值?

 (c<-summary(MLpol <- mixture(Y = Y, experts = X, model = "MLpol", loss.type = "square"))$coefficients)
[1] 0.585902 0.414098 0.000000

很抱歉,我可能对此有所了解,我的问题可能根本没有意义,但我非常感谢任何帮助/见解。

【问题讨论】:

  • Opera 包结合了预测。如果要预测 y+1,则需要来自不同预测者对 x+1 的预测。这些“不同”预测器的组合(=集合)由 MLpol 算法完成。 $coefficients 给出权重向量,将其与 x+1 向量一起应用得到 y+1 值。

标签: r


【解决方案1】:

opera 包的想法与具有训练集和测试集的经典批处理机器学习方法有点不同。目标是进行顺序预测:

在每一轮 t=1,...,n, 1) 算法接收专家对第 n+1 轮的预测, 2) 它通过结合专家对这个时间步长进行预测 3) 它通过使用新的输出来更新用于组合的权重

如果您有样本外预测(即专家对没有输出的未来值的预测),您可以做的最好的事情是使用最后一个系数并使用它们进行预测,方法是:

    newexperts %*% model$coefficients

在实践中,您可能还想使用平均系数。你也可以使用

    predict (object, # for exemple, mixture(model='FS', loss.type="square")
           newexperts = # matrix of out-of-sample experts predictions
           online = FALSE,
           type = 'response')

通过使用参数 online = FALSE,模型不需要任何 newY。它不会更新模型。当您提供 newY 时,算法不会作弊。它不使用第 t 轮的值来进行第 t 轮的预测。 newY 的值仅用于逐步更新系数,就像按顺序进行预测一样。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 2021-12-22
    • 2016-11-10
    • 2020-08-19
    • 2017-12-12
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多