繁体   English   中英

使用R中的OPERA包预测Future值

[英]Predict Future values by using OPERA package in R

我一直试图通过Pierre Gaillard和Yannig Goude来理解Opera“专家聚合的在线预测”。 我阅读了Pierre Gaillard( http://pierre.gaillard.me/opera.html )和Rob Hyndman( https://robjhyndman.com/hyndsight/forecast-combinations/ )的两篇文章。 但是,我不明白如何预测未来的价值观。 在皮埃尔的例子中,newY = Y代表测试数据集(Y < - data_test $ Load),它是法国电力负荷的每周观测值。 如下所示,数据将于2009年12月结束。现在,我如何预测2010年的价值? 这里有什么新人?

> 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

但是我仍然不确定如何生成权重w / out newY。 也许我们可以使用MLpol输出的最终系数来预测未来的价值?

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

对不起,我可能会对此表示不满,我的问题根本没有意义,但我非常感谢任何帮助/见解。

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时,算法不会作弊。 它不使用rount t处的值来在第t轮进行预测。 newY的值仅用于逐步更新系数,就好像预测是按顺序进行的一样。

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM