2017-05-20 208 views
1

我试图找出如何处理我的预测问题,我不确定我的理解是否正确,所以如果有人能帮助我,这将是非常好的。首先,我的目标是预测回归的时间序列。除了使用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

只是为了澄清我的理解:你建立了一个随机森林模型,但你不知道如何使用它来预测未来的CPU使用率,对吧?这可能与“样本外”数据无关,如果我错了,请纠正我。因为“样本外”数据是未用于模型训练的数据,与未来(未知)数据相反? –

+0

是的,我想用我的模型来预测下一个12/24小时的例子(样本中)。正如我所提到的,数据集分为训练,验证和测试集,但对我而言,只能预测此测试和验证集。我的目标是将上周的数据纳入预测,并在此基础上预测未来12/24小时。哦,好吧,对不起,我认为对于我而言,“样本外”这个词有一个误解。 – Daniel

+0

好的,有一些想法可能不是解决方案:为了预测接下来的12/24小时,随机森林模型需要知道在接下来的12/24小时内UsageMemory,Indicator和Delay的值,而我们没有。因此,您可以尝试构建其他模型来预测这些变量,然后预测CPU使用情况。就我个人而言,我想用时间序列来解决这类问题。 ML不是解决所有问题的瑞士刀。 –

回答

0

让我们看看我的问题是否正确。我想,给定一个时间窗口,例如UsageCPU,UsageMemory,Indicator和Delay的最后一次观察(一天),你想要预测UsageCPU的'n'个下一个观察值。你可以用随机森林做这样的事情的一种方法是为每个你想要预测的下一次观察分配一个模型。所以,如果你想预测10个UsageCPU观察值,你应该训练10个随机森林模型。

使用我开始的例子,你可以将你拥有的数据分成154个观测值。在每个中,您将使用前144个观察值来预测UsageCPU的最后10个值。有很多方法可以使用特征工程从这些前144个观测值中提取信息,以便用您的模型进行训练。对每个变量均值,每个变量的最后一次观察值,每个变量的全局平均值。因此,对于每个块,您将得到一个包含一堆预测变量和10个目标值的向量。

绑定您为每个块获得的矢量,并且您将获得一个矩阵,其中第一列是预测变量,最后10列是目标。用n个预测变量列和1个目标列训练每个随机森林。现在,您可以将模型应用于从包含144个观察值的任何数据块中提取的要素。为目标第1列训练的模型将“预测”前一个观测值,为目标第2列训练的模型将“预测”两个观测值,为目标第3列训练的模型将“预测”前面三个观测值...

+0

嗯,我不知道这应该如何工作,因为现在我的训练集包含1008个观察值(1周)。根据我的理解,用于训练的数据越多,获得模型的准确性越高。按照你所说的将数据分割为154个观测数据将是相同的输出,但只有一天。用10次随机森林回归做这10次我会得到类似的结果,而且由于少量的训练数据,准确度也很差。也许我理解你的解决方案是错误的,但在我看来,它是不同大小训练长度的相同方法。 – Daniel