我正在阅读“使用R进行动手时间序列分析”这本书,并且使用机器学习h2o程序包停留在示例上。我不知道如何使用h2o.predict函数。在示例中,它需要newdata参数,在这种情况下,它是测试数据。但是,如果您实际上不知道时间值的未来值,该如何预测呢?
如果我只是忽略newdata参数,则会得到:尚未实现缺少newdata
参数的预测。
library(h2o)
h2o.init(max_mem_size = "16G")
train_h <- as.h2o(train_df)
test_h <- as.h2o(test_df)
forecast_h <- as.h2o(forecast_df)
x <- c("month", "lag12", "trend", "trend_sqr")
y <- "y"
rf_md <- h2o.randomForest(training_frame = train_h,
nfolds = 5,
x = x,
y = y,
ntrees = 500,
stopping_rounds = 10,
stopping_metric = "RMSE",
score_each_iteration = TRUE,
stopping_tolerance = 0.0001,
seed = 1234)
h2o.varimp_plot(rf_md)
rf_md@model$model_summary
library(plotly)
tree_score <- rf_md@model$scoring_history$training_rmse
plot_ly(x = seq_along(tree_score), y = tree_score,
type = "scatter", mode = "line") %>%
layout(title = "Random Forest Model - Trained Score History",
yaxis = list(title = "RMSE"),
xaxis = list(title = "Num. of Trees"))
test_h$pred_rf <- h2o.predict(rf_md, test_h)
test_1 <- as.data.frame(test_h)
mape_rf <- mean(abs(test_1$y - test_1$pred_rf) / test_1$y)
mape_rf
答案 0 :(得分:2)
H2O-3不支持传统的时间序列算法(例如ARIMA)。相反,建议将时间序列用例视为监督学习问题,并执行时间序列特定的预处理。
例如,如果您的目标是预测明天商店的销售量,则可以将其视为回归问题,而目标是销售量。但是,如果您尝试在原始数据上训练监督学习模型,则您的表现很可能会很差。因此,诀窍是添加诸如滞后之类的历史属性作为预处理步骤。
如果我们在未更改的数据集上训练模型,则平均绝对误差约为35%。
如果我们开始添加历史特征,例如该商店前一天的销售额,则可以将平均绝对误差降低到15%左右。
虽然H2O-3不支持滞后,但是您可以利用气泡水来执行此预处理。您可以使用Spark生成每个组的滞后,然后使用H2O-3训练回归模型。这是此过程的示例:https://github.com/h2oai/h2o-tutorials/tree/master/best-practices/forecasting
答案 1 :(得分:0)
训练数据train_df
必须在x
(c("month", "lag12", "trend", "trend_sqr")
)和y
("y"
)中列出所有列,而数据您给h2o.predict()
提供的内容只需要在x
中包含这些列即可; y列将作为预测返回。
由于(在x
中具有诸如滞后,趋势等特征,因此这是一个时间序列并不重要。 (但是在准备这些功能时,您必须非常小心,以确保您不会使用当时不知道的任何信息-但我想这本书已经在强调这一点了。)
通常使用时间序列,对于训练数据中的给定行,您的x
数据是时间t已知的数据,而y
列中的值是感兴趣的值时间t + 1。因此,在进行预测时,您将x
值指定为当前值 ,然后返回的预测就是接下来将要发生的情况。