我试图找出如何处理我的预测问题,我不确定我的理解是否在这个领域是正确的,所以如果有人可以帮助我真的很好。首先,我的目标是用回归预测时间序列。我没有使用ARIMA模型或其他启发式模型,而是专注于机器学习技术,如随机森林回归,k-最近邻回归等回归。以下是数据集的概述:
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
时间戳以10分钟的步长增加,我想用依赖变量UsageMemory,Indicator等预测自变量UsageCPU。此时我将解释我对预测部分的一般知识。因此,对于预测,有必要将数据集分成训练,验证和测试集。为此,我的数据集包含2个整周,分为60%培训,20%验证和20%测试。这意味着对于训练集我包括前8天,对于验证和测试集我每3天。之后我可以在SparkR中训练模型(设置并不重要)。
model <- spark.randomForest(train, UsageMemory ~ UsageMemory, Indicator, Delay,
type = "regression", maxDepth = 30, maxBins = 50, numTrees=50,
impurity="variance", featureSubsetStrategy="all")
在此之后,我可以使用验证集验证结果并计算RMSE以查看模型的准确性以及必须在我的模型构建部件中调整哪个点。如果完成,我可以预测测试数据集:
predictions <- predict(model, test)
因此预测工作正常,但这只是样本内预测,不能用于预测第二天。根据我的理解,样本内只能用于预测数据集中的数据,而不能预测明天可能发生的未来值。所以真的想要预测例如第二天或仅下一个10分钟/ 1小时,这只能通过样本外预测成功。我也尝试过这样的事情(滚动回归)来自随机森林的预测值,但在我的情况下,滚动回归仅用于评估不同回归量相对于不同参数组合的性能。所以我的理解是没有样本预测。
t <- bind(prediction, RollingRegression3 = rollApply(prediction, fun=function(x) mean(UsageCPU), window=6, align='right'))
所以在我的理解中,在模型构建过程开始之前,我需要一些东西(可能是滞后值?)。我还阅读了很多不同的论文和书籍,但没有明确的方法,如何做到这一点以及关键点是什么。只有像t + 1,t + n这样的东西,但是现在我甚至都不知道怎么做。如果有人可以帮助我,那真是太好了,因为我现在试着解决这个问题,现在已经三个月了,谢谢。
答案 0 :(得分:0)
让我们看看我的问题是否正确。我认为,给定一个时间窗口,例如在UsageCPU,UsageMemory,Indicator和Delay的最后一次观察(一天)中,您想要预测UsageCPU的'n'次观察。使用随机森林可以做到这一点的一种方法是为每个想要预测的下一个观测值分配一个模型。因此,如果您想预测10个下一个UsageCPU观测值,您应该训练10个随机森林模型。
使用我开始的示例,您可以分割154个观察结果中的数据。在每个中,您将使用前144个观察值来预测UsageCPU的最后10个值。有很多方法可以使用特征工程从这些前144个观测中提取信息,以便用例如,每个变量的平均值,每个变量的最后一次观察,每个变量的全局平均值。因此,对于每个块,您将获得包含一组预测变量和10个目标值的向量。
绑定每个块的矢量,你将得到一个矩阵,其中第一列是预测变量,最后10列是目标。使用n个预测变量列和1个目标列训练每个随机森林。现在,您可以对从包含144个观察值的任何数据块中提取的要素应用模型。针对目标柱1训练的模型将“预测”前方的一个观测,针对目标柱2训练的模型将“预测”前方的两个观测值,针对目标柱3训练的模型将“预测”前方的三个观测值......