当前位置: 首页 > 知识库问答 >
问题:

autoarima训练和测试,按r中的id分组

管峻
2023-03-14

我正试图用汽车预测时间序列。阿里玛。我需要的是分割训练和测试数据,以查看模型指标。我的日期范围是2016年12月至2020年1月。我需要2018年12月之前的列车数据,以及之后的测试。

除此之外,我还需要每个id的指标RMSE和MSE。这是我的数据的一个例子:

x<-    tibble::tribble(
      ~ID,        ~Date,  ~Value,
       1L, "01-12-2016",     48L,
       1L, "01-01-2017",  10055L,
       1L, "01-02-2017",    650L,
       1L, "01-03-2017",   8255L,
       1L, "01-04-2017",   3680L,
       1L, "01-05-2017",   2180L,
       1L, "01-06-2017",   2790L,
       1L, "01-07-2017",   3805L,
       1L, "01-08-2017",   2811L,
       1L, "01-09-2017",   -225L,
       1L, "01-10-2017",   -232L,
       1L, "01-11-2017",   -243L,
       1L, "01-12-2017",   -217L,
       1L, "01-01-2018",   -256L,
       1L, "01-02-2018",   -277L,
       1L, "01-03-2018",     -3L,
       1L, "01-04-2018",   -247L,
       1L, "01-05-2018",     88L,
       1L, "01-06-2018",   -260L,
       1L, "01-07-2018",   -228L,
       1L, "01-08-2018",   -285L,
       1L, "01-09-2018",   -321L,
       1L, "01-10-2018",   -265L,
       1L, "01-11-2018",   -302L,
       1L, "01-12-2018", -11968L,
       1L, "01-01-2019",   5435L,
       1L, "01-02-2019",   6694L,
       1L, "01-03-2019",   4750L,
       1L, "01-04-2019",   3747L,
       1L, "01-05-2019",   3727L,
       1L, "01-06-2019",   3252L,
       1L, "01-07-2019",   1691L,
       1L, "01-08-2019",   2489L,
       1L, "01-09-2019",   -182L,
       1L, "01-10-2019",   3926L,
       1L, "01-11-2019",    326L,
       1L, "01-12-2019",  -1047L,
       1L, "01-01-2020",     14L,
       2L, "01-12-2016",   -241L,
       2L, "01-01-2017",   -262L,
       2L, "01-02-2017",   -231L,
       2L, "01-03-2017",   -203L,
       2L, "01-04-2017",   -226L,
       2L, "01-05-2017",   -223L,
       2L, "01-06-2017",   -300L,
       2L, "01-07-2017",   -259L,
       2L, "01-08-2017",   -241L,
       2L, "01-09-2017",   -225L,
       2L, "01-10-2017",   -227L,
       2L, "01-11-2017",   -243L,
       2L, "01-12-2017",   -217L,
       2L, "01-01-2018",   -256L,
       2L, "01-02-2018",   -277L,
       2L, "01-03-2018",      0L,
       2L, "01-04-2018",   -247L,
       2L, "01-05-2018",   -274L,
       2L, "01-06-2018",   -264L,
       2L, "01-07-2018",   -227L,
       2L, "01-08-2018",   -275L,
       2L, "01-09-2018",   -325L,
       2L, "01-10-2018",   -269L,
       2L, "01-11-2018",   -306L,
       2L, "01-12-2018",   -264L,
       2L, "01-01-2019",   -308L,
       2L, "01-02-2019",   -332L,
       2L, "01-03-2019",   -260L,
       2L, "01-04-2019",   -300L,
       2L, "01-05-2019",   -302L,
       2L, "01-06-2019",   -291L,
       2L, "01-07-2019",   -284L,
       2L, "01-08-2019",   -288L,
       2L, "01-09-2019",   -272L,
       2L, "01-10-2019",      0L,
       2L, "01-11-2019",      0L,
       2L, "01-12-2019", -17107L,
       2L, "01-01-2020",   3500L,
       3L, "01-12-2016",   1940L,
       3L, "01-01-2017",   1753L,
       3L, "01-02-2017",   2758L,
       3L, "01-03-2017",   2539L,
       3L, "01-04-2017",  -9078L,
       3L, "01-05-2017",   5215L,
       3L, "01-06-2017",   1796L,
       3L, "01-07-2017",  -8424L,
       3L, "01-08-2017",  19868L,
       3L, "01-09-2017",  10707L,
       3L, "01-10-2017",   8985L,
       3L, "01-11-2017",   3058L,
       3L, "01-12-2017",   2469L,
       3L, "01-01-2018",     21L,
       3L, "01-02-2018",   1039L,
       3L, "01-03-2018",   2875L,
       3L, "01-04-2018",  -2678L,
       3L, "01-05-2018",   1515L,
       3L, "01-06-2018",   2651L,
       3L, "01-07-2018",  -5014L,
       3L, "01-08-2018",    299L,
       3L, "01-09-2018",   1755L,
       3L, "01-10-2018",   5009L,
       3L, "01-11-2018",   2857L,
       3L, "01-12-2018",   2909L,
       3L, "01-01-2019",   1353L,
       3L, "01-02-2019",   2337L,
       3L, "01-03-2019",   3019L,
       3L, "01-04-2019",   -531L,
       3L, "01-05-2019",  -1055L,
       3L, "01-06-2019",   1706L,
       3L, "01-07-2019",   -507L,
       3L, "01-08-2019",   2234L,
       3L, "01-09-2019",    890L,
       3L, "01-10-2019",     94L,
       3L, "01-11-2019",  -1781L,
       3L, "01-12-2019", 102590L,
       3L, "01-01-2020",    471L,
       4L, "01-12-2016",   2658L,
       4L, "01-01-2017",   2344L,
       4L, "01-02-2017",   2728L,
       4L, "01-03-2017",    -58L,
       4L, "01-04-2017",   -226L,
       4L, "01-05-2017",     -5L,
       4L, "01-06-2017",   -300L,
       4L, "01-07-2017",   -259L,
       4L, "01-08-2017",   -241L,
       4L, "01-09-2017",   -225L,
       4L, "01-10-2017",   -229L,
       4L, "01-11-2017",   -243L,
       4L, "01-12-2017",   -217L,
       4L, "01-01-2018",   -245L,
       4L, "01-02-2018",   -277L,
       4L, "01-03-2018",   -155L,
       4L, "01-04-2018",   5437L,
       4L, "01-05-2018",   2866L,
       4L, "01-06-2018",   3091L,
       4L, "01-07-2018",   3669L,
       4L, "01-08-2018",    311L,
       4L, "01-09-2018",   4120L,
       4L, "01-10-2018",   2357L,
       4L, "01-11-2018",  -4759L,
       4L, "01-12-2018",   4220L,
       4L, "01-01-2019",   2730L,
       4L, "01-02-2019",   2515L,
       4L, "01-03-2019",   2560L,
       4L, "01-04-2019",   2864L,
       4L, "01-05-2019",   1935L,
       4L, "01-06-2019",    938L,
       4L, "01-07-2019",   3268L,
       4L, "01-08-2019",   3232L,
       4L, "01-09-2019",   3347L,
       4L, "01-10-2019",   4241L,
       4L, "01-11-2019",   -247L,
       4L, "01-12-2019",    179L,
       4L, "01-01-2020",   2542L
      )

x<-as.data.frame(x)

我尝试使用dplyr:

x %>% 
  group_by(ID) %>% 
  do(fit=auto.arima(.$Value,seasonal = F,stepwise = F,approximation = F),
     fit_forecast=forecast(auto.arima(.$Value,seasonal = F,stepwise = F,approximation = F),h=12))

但我不知道如何添加训练和测试的步骤以及指标。有人知道怎么解决吗?谢谢

共有2个答案

白越
2023-03-14

您只需将数据帧子集到训练和测试中。通常为80/20分割或90/10分割。但在你的情况下,因为你似乎想要特定的日期,你甚至可以硬编码行数。

library("lubridate")
x$Date <- dmy(x$Date)
x <- x[order(x$Date),]
rownames(x) <- NULL
x.train <- x[1:139,]
x.text <- x[-(1:139),]

通常,还对数据进行采样,以获得80/20或90/10。但在时间序列中,您希望简单地拆分而不是采样。

郭业
2023-03-14

我已经在https://community.rstudio.com/t/autoarima-train-and-test-grouped-by-id-in-r/66400回答了同样的问题,但在此郑重声明。

使用tsibble和fable软件包,这要容易得多,就像这样。

library(dplyr)
library(tsibble)
library(lubridate)
library(fable)

# Turn x into a tsibble object
x <- x %>%
  mutate(Date = yearmonth(dmy(Date))) %>%
  as_tsibble(index = Date, key = ID)

# Use filter to create training set
# Then fit non-seasonal ARIMA models
fit <- x %>%
  filter(Date <= yearmonth("2018 Dec")) %>%
  model(ARIMA(Value ~ PDQ(0,0,0), stepwise=FALSE, approximation=FALSE))

# Now forecast the test set and compute RMSE and MSE
fit %>%
  forecast(h = 13) %>%
  accuracy(x) %>%
  mutate(MSE = RMSE^2) %>%
  select(ID, RMSE, MSE)
#> # A tibble: 4 x 3
#>      ID   RMSE        MSE
#>   <int>  <dbl>      <dbl>
#> 1     1  9696.  94011195.
#> 2     2  4792.  22964718.
#> 3     3 27899. 778326636.
#> 4     4  1776.   3153398.

由reprex软件包(v0.3.0)于2020年5月18日创建

 类似资料:
  • 问题内容: 我需要将数据分为训练集(75%)和测试集(25%)。我目前使用以下代码进行操作: 但是,我想对训练数据集进行分层。我怎么做?我一直在研究该方法,但不允许我指定75%/ 25%的划分,而是仅对训练数据集进行分层。 问题答案: [更新为0.17] 请参阅以下文档: [/更新为0.17] 有一个拉要求在这里。但是,您可以根据需要简单地进行 训练和测试索引的使用。

  • 为了评估我们的监督模型的泛化能力,我们可以将数据分成训练和测试集: from sklearn.datasets import load_iris iris = load_iris() X, y = iris.data, iris.target 考虑如何正常执行机器学习,训练/测试分割的想法是有道理的。真实世界系统根据他们拥有的数据进行训练,当其他数据进入时(来自客户,传感器或其他来源),经过训

  • 本文向大家介绍Python分割训练集和测试集的方法示例,包括了Python分割训练集和测试集的方法示例的使用技巧和注意事项,需要的朋友参考一下 数据集介绍 使用数据集Wine,来自UCI  。包括178条样本,13个特征。 分割训练集和测试集 随机分割 分为训练集和测试集 方法:使用scikit-learn中model_selection子模块的train_test_split函数 以上就是本文的

  • 本文向大家介绍python 划分数据集为训练集和测试集的方法,包括了python 划分数据集为训练集和测试集的方法的使用技巧和注意事项,需要的朋友参考一下 sklearn的cross_validation包中含有将数据集按照一定的比例,随机划分为训练集和测试集的函数train_test_split 得到的x_train,y_train(x_test,y_test)的index对应的是x,y中被抽取

  • 问题内容: 我有一个很大的数据集,想将其分为训练(50%)和测试集(50%)。 假设我有100个示例存储了输入文件,每一行包含一个示例。我需要选择50条线作为训练集和50条线测试集。 我的想法是首先生成一个长度为100(值范围从1到100)的随机列表,然后将前50个元素用作50个训练示例的行号。与测试集相同。 这可以在Matlab中轻松实现 但是如何在Python中完成此功能?我是Python的新

  • 相关概念 客户端 (Client):客户端是一个用于建立 TensorFlow 计算图并创立与集群进行交互的会话层 tensorflow::Session 的程序。一般客户端是通过 python 或 C++ 实现的。一个独立的客户端进程可以同时与多个 TensorFlow 的服务端相连 (上面的计算流程一节),同时一个独立的服务端也可以与多个客户端相连。 集群 (Cluster) : 一个 Ten