预测模型预测提前一天 - 滑动 window
Forecasting model predict one day ahead - sliding window
我遇到了一个问题。我正在使用 SparkR 进行时间序列预测,但这种情况也可以转移到普通的 R 环境中。我不想使用 ARIMA 模型,而是使用随机森林回归等回归模型来预测未来一天的负载。我还阅读了有关使用滑动 window 方法评估不同回归器相对于不同参数组合的性能的信息。所以为了更好地理解这是我的数据集结构的一个例子:
Timestamp UsageCPU UsageMemory Indicator Delay
2014-01-03 21:50:00 3123 1231 1 123
2014-01-03 22:00:00 5123 2355 1 322
2014-01-03 22:10:00 3121 1233 2 321
2014-01-03 22:20:00 2111 1234 2 211
2014-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 Delay
2014 1 3 21 50 3123 1231 1 123
2014 1 3 22 00 5123 2355 1 322
2014 1 3 22 10 3121 1233 2 321
2114 1 3 22 20 2111 1234 2 211
下一步是为模型创建训练集和测试集。
trainTest <-randomSplit(SparkDF,c(0.7,0.3), seed=42)
train <- trainTest[[1]]
test <- trainTest[[2]]
然后就可以创建模型+预测了(randomForest的设置先不相关):
model <- spark.randomForest(train, UsageCPU ~ ., type = "regression", maxDepth = 5, maxBins = 16)
predictions <- predict(model, test)
所以我知道所有这些步骤,并且通过将预测数据与实际数据绘制在一起看起来相当不错。但是这个回归模型不是动态的,这意味着我无法提前预测一天。因为UsageCPU、UsageMemory等特性不存在,所以想从历史值预测到第二天。正如开头提到的,滑动 window 方法可以在这里工作,但我不确定如何应用它(在整个数据集上,仅在训练或测试集上)。
此实现来自 shabbychef's and mbq:
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);
}
最后一个问题涉及 window 尺码。我想以小时为单位预测第二天 (00,01,02,03...),但是时间戳的间隔是 10 分钟,所以在我的计算中 window 的大小应该是 144 (10 *60*24 / 10).
如果有人能帮助我,那就太好了。谢谢!
我在使用神经网络进行时间序列预测时也遇到了同样的问题。我实现了很多模型,效果最好的模型是滑动 window 与神经网络相结合。
我也从该领域的其他研究人员那里得到证实。由此我们得出结论,如果你想在一步中预测提前 1 天(24 个视野),训练将对系统提出要求。我们进行了以下操作:
1. We had a sliding window of 24 hours. e.g lets use [1,2,3] here
2. Then use ML model to predict the [4]. Meaning use value 4 as target.
# As illustration we had
x = [1,2,3]
# then set target as
y=[4].
# We had a function that returns the x=[1,2,3] and y =[4] and
# shift the window in the next training step.
3.To the:
x =[1,2,3]
we can add further features that are important to the model.
x=[1,2,3,feature_x]
4. Then we minimise error and shift the window to have:
x = [2,3,4,feature_x] and y = [5].
5. You could also predict two values ahead. e.g [4,5] .
6. Use a list to collect output and plot
7. Make prediction after the training.
我遇到了一个问题。我正在使用 SparkR 进行时间序列预测,但这种情况也可以转移到普通的 R 环境中。我不想使用 ARIMA 模型,而是使用随机森林回归等回归模型来预测未来一天的负载。我还阅读了有关使用滑动 window 方法评估不同回归器相对于不同参数组合的性能的信息。所以为了更好地理解这是我的数据集结构的一个例子:
Timestamp UsageCPU UsageMemory Indicator Delay
2014-01-03 21:50:00 3123 1231 1 123
2014-01-03 22:00:00 5123 2355 1 322
2014-01-03 22:10:00 3121 1233 2 321
2014-01-03 22:20:00 2111 1234 2 211
2014-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 Delay
2014 1 3 21 50 3123 1231 1 123
2014 1 3 22 00 5123 2355 1 322
2014 1 3 22 10 3121 1233 2 321
2114 1 3 22 20 2111 1234 2 211
下一步是为模型创建训练集和测试集。
trainTest <-randomSplit(SparkDF,c(0.7,0.3), seed=42)
train <- trainTest[[1]]
test <- trainTest[[2]]
然后就可以创建模型+预测了(randomForest的设置先不相关):
model <- spark.randomForest(train, UsageCPU ~ ., type = "regression", maxDepth = 5, maxBins = 16)
predictions <- predict(model, test)
所以我知道所有这些步骤,并且通过将预测数据与实际数据绘制在一起看起来相当不错。但是这个回归模型不是动态的,这意味着我无法提前预测一天。因为UsageCPU、UsageMemory等特性不存在,所以想从历史值预测到第二天。正如开头提到的,滑动 window 方法可以在这里工作,但我不确定如何应用它(在整个数据集上,仅在训练或测试集上)。
此实现来自 shabbychef's and mbq:
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);
}
最后一个问题涉及 window 尺码。我想以小时为单位预测第二天 (00,01,02,03...),但是时间戳的间隔是 10 分钟,所以在我的计算中 window 的大小应该是 144 (10 *60*24 / 10).
如果有人能帮助我,那就太好了。谢谢!
我在使用神经网络进行时间序列预测时也遇到了同样的问题。我实现了很多模型,效果最好的模型是滑动 window 与神经网络相结合。 我也从该领域的其他研究人员那里得到证实。由此我们得出结论,如果你想在一步中预测提前 1 天(24 个视野),训练将对系统提出要求。我们进行了以下操作:
1. We had a sliding window of 24 hours. e.g lets use [1,2,3] here
2. Then use ML model to predict the [4]. Meaning use value 4 as target.
# As illustration we had
x = [1,2,3]
# then set target as
y=[4].
# We had a function that returns the x=[1,2,3] and y =[4] and
# shift the window in the next training step.
3.To the:
x =[1,2,3]
we can add further features that are important to the model.
x=[1,2,3,feature_x]
4. Then we minimise error and shift the window to have:
x = [2,3,4,feature_x] and y = [5].
5. You could also predict two values ahead. e.g [4,5] .
6. Use a list to collect output and plot
7. Make prediction after the training.