基本上,我有780个(每日)观测值,我希望用其中的80%来训练数据,剩下的20%用于交叉验证。因此,我认为应该使用以下代码:
df_cv = cross_validation(m, initial='624 days', horizon='156 days')
其中,initial日期对应于我希望用于训练的最初数量的观测值,而horizon对应于我希望用于交叉验证的剩余数量的观测值。
我觉得我没有正确应用这个方法,因为出现了一个我并不完全理解的截止日期(cutoff date)。
我怎样才能实现我的目标,即使用最初80%的观测值来训练数据,并使用最后20%进行交叉验证呢?
提前感谢您
回答:
截止日期用于确定在第一次验证迭代中您的训练数据集(截止日期之前)包含什么,以及将要预测的内容(截止日期之后)。如果您想使用80%的数据作为训练数据,并且希望进行交叉验证,您不能将horizon值设置为数据的20%,因为这样只允许进行一次验证。您需要一个较小的数字来设置horizon,因为它决定了每次迭代预测的天数。对于每个有序的验证迭代,FBProphet将在截止日期和截止日期+horizon之间进行预测,然后增加周期以获得下一个截止日期。以下是一个例子:
总数据集800天
initial = 624 == 训练数据集的大小
horizon = 20 == 要预测的大小
period = 10(默认值=horizon的一半)== 截止日期之间的增量间隔
第一次迭代:在1-624天训练,预测625-644天
第二次迭代:在11-634天训练,预测635-654天
第三次迭代:在21-644天训练,预测645-664天
这样,最后20%的数据可以在不同的时间框架内用于交叉验证