【发布时间】:2023-11-15 14:54:01
【问题描述】:
我试图弄清楚如何处理我的预测问题,但我不确定我的理解在这个领域是否正确,所以如果有人能帮助我,那就太好了。首先,我的目标是预测带有回归的时间序列。我不想使用 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这样的东西,但现在我什至不知道该怎么做。如果有人可以帮助我,那就太好了,因为我从三个月开始就试图解决这个问题,谢谢。
【问题讨论】:
-
只是为了澄清我的理解:您构建了一个随机森林模型,但您不知道如何使用它来预测未来的 CPU 使用率,对吧?这可能与“样本外”数据无关,如果我错了,请纠正我。因为,与未来(未知)数据相反,“样本外”数据是不用于模型训练的数据?
-
是的,我想使用我的模型来预测下一个 12/24 小时,例如(样本内)。正如我所提到的,数据集分为训练集、验证集和测试集,但对我来说,只能在这个测试集和验证集上进行预测。我的目标是将上周的数据放入预测中,并在此基础上预测下一个 12/24 小时。哦,好吧,抱歉,我认为“样本外”这个词对我来说有一个误解。
-
好吧,有一些想法可能不是解决方案:为了预测下一个12/24h,随机森林模型需要知道下一个12/的UsageMemory、Indicator和Delay的值我们没有的24小时。因此,您可以尝试构建其他模型来预测这些变量,然后预测 CPU 使用率。就个人而言,我想使用时间序列来解决这类问题。 ML 不是解决所有问题的瑞士刀。
-
只是为了指出您没有问过的复杂情况:您是否检查过数据中的自相关水平?如果水平很高,您可能需要在时间以外的某个领域工作。如果您的数据及时均匀采样,一种直接的方法是使用数据的 FFT 进行训练。使用逆 FFT 来解释预测。
标签: r time-series prediction forecasting predict