预测模型预测一天前的滑动窗口

我遇到了一个问题。我正在使用SparkR进行时间序列预测,但这个场景也可以转移到普通的R环境中。我不想使用ARIMA模型,而是想使用回归模型,例如随机森林回归等,来预测一天的负载。我还了解到滑动窗口方法可以用来评估不同回归器在不同参数组合下的性能。为了更好地理解,这是我数据集结构的一个例子:

Timestamp              UsageCPU     UsageMemory   Indicator  Delay2014-01-03 21:50:00    3123            1231          1        1232014-01-03 22:00:00    5123            2355          1        3222014-01-03 22:10:00    3121            1233          2        3212014-01-03 22:20:00    2111            1234          2        2112014-01-03 22:30:00    1000            2222          2         0 2014-01-03 22:40:00    4754            1599          1         0

要使用任何类型的回归器,下一步是提取特征并将它们转换为可读的格式,因为这些回归模型无法读取时间戳:

Year   Month  Day  Hour    Minute    UsageCPU   UsageMemory  Indicator Delay2014   1      3    21       50        3123        1231          1      1232014   1      3    22       00        5123        2355          1      3222014   1      3    22       10        3121        1233          2      3212114   1      3    22       20        2111        1234          2      211

下一步是为模型创建训练集和测试集。

trainTest <-randomSplit(SparkDF,c(0.7,0.3), seed=42)train <- trainTest[[1]]test <- trainTest[[2]]

然后可以创建模型和预测(随机森林的设置首先不重要):

model <- spark.randomForest(train, UsageCPU ~ ., type = "regression", maxDepth = 5, maxBins = 16)predictions <- predict(model, test)

我知道所有这些步骤,通过绘制预测数据和实际数据,看起来相当不错。但是这种回归模型不是动态的,这意味着我无法预测一天前。因为像UsageCPU、UsageMemory等特征不存在,我想从历史值预测到下一天。正如开头提到的,滑动窗口方法在这里可以起作用,但我不知道如何应用它(在整个数据集上,还是只在训练集或测试集上)。

这个实现来自shabbychefmbq

 slideMean<-function(x,windowsize=3,slide=2){ idx1<-seq(1,length(x),by=slide); idx1+windowsize->idx2; idx2[idx2>(length(x)+1)]<-length(x)+1; c(0,cumsum(x))->cx; return((cx[idx2]-cx[idx1])/windowsize);}

最后一个问题涉及到窗口大小。我想按小时预测下一天(00,01,02,03…),但时间戳的间隔是10分钟,所以在我的计算中,窗口的大小应该是144(10*60*24 / 10)。

如果有人能帮我,那就太好了。谢谢!


回答:

我也在使用神经网络进行时间序列预测时遇到了同样的问题。我实现了许多模型,其中效果最好的模型是滑动窗口结合神经网络。我还从该领域的其他研究人员那里得到了确认。从中我们得出结论,如果你想在一个步骤中预测一天前(24个时间段),训练将对系统提出很高的要求。我们采取了以下步骤:

1. 我们有一个24小时的滑动窗口。例如,让我们在这里使用[1,2,3]。2. 然后使用机器学习模型预测[4]。意味着将值4设为目标。# 作为示例,我们有x = [1,2,3] # 然后将目标设为y=[4]。# 我们有一个函数返回x=[1,2,3]和y =[4]并# 在下一个训练步骤中移动窗口。3. 对x =[1,2,3]我们可以添加对模型重要的其他特征。x=[1,2,3,feature_x]4. 然后我们最小化误差并移动窗口以得到:x = [2,3,4,feature_x]和y = [5]。5. 你也可以预测两个值前。例如[4,5]。6. 使用列表收集输出并绘图7. 在训练后进行预测。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注