pandas 如何将多个训练好的模型组合成一个模型,并使用它对测试集进行预测?

nnsrf1az  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个包含100行和1000+列的时间序列数据框架,这些列彼此独立,我对每一列运行ARIMA模型,因此,就像运行1000+ ARIMA分析一样。
我编写了一段代码,它循环遍历训练集的列,并根据提供的p、d、q参数在每列上拟合ARIMA模型。虽然,看起来模型在进一步遍历列时,会忘记之前学习的内容,只使用最后一列的训练结果来预测测试。(这会导致预测在测试集上过拟合)。
有没有一种方法可以将所有经过训练的模型的学习结果结合在一起,并使用它对测试集进行预测?
示例数据框如下所示:

date                        Col 1     Col 2     Col 3      Col 4
2001-07-21 10:00:00+05:00    45          51       31         3  
2001-07-21 10:15:00+05:00    46          50       32         3
2001-07-21 10:30:00+05:00    47          51       34         7
2001-07-21 10:45:00+05:00    50          50       33         9
2001-07-21 11:00:00+05:00    55          51       32         8
2001-07-21 11:15:00+05:00    52          73       34         11
2001-07-21 11:30:00+05:00    51          72       30         14

我实现的代码是:

#training set inclues all columns except the last and test set includes only last column.
train = df.iloc[:, :-1]
test = df.iloc[:,-1:]

order = (1,2,3) # <- plug-in p, d, q here 

for col in train.columns:
  model = ARIMA(train[col], order = order)  #training every column in training set
  model = model.fit()
model.summary()

predictions = model.predict(len(test))
t9aqgxwy

t9aqgxwy1#

我认为这个问题是不可能解决的,因为你已经把它框定了。
假设你有一个很棒的机器学习模型,它从第1列到第N-1列提取每一条可能的信息。
此模型仍然不知道以下内容:

  • 对于第N列,应该预测多大数量级的值?这是一个像GDP一样的变量,它的答案应该在1万亿的范围内?这是一个像失业率一样的变量,它的答案应该在0-100的范围内?
  • N列是否随时间推移而增加?
  • N列是否通常随时间推移而减少?
  • N列是否与季节相关?

这些列彼此独立。
除非有一些理由认为这个 Dataframe 的列应该随着时间的推移而相关,否则其他列对您的预测没有任何帮助,您应该直接删除它们。
但是,也许其他列与你的Y变量相关,在这种情况下,我建议如下的训练/测试分割:
1.取数据集的前2/3行,这就是训练集。
在训练集中,从1到N - 1的列是X_train。列N是Y_train。
1.取数据集的最后1/3行,这就是测试集。
在测试集中,从1到N - 1的列是X_test。列N是Y_test。
使用X变量作为ARIMA的外部输入。大多数ARIMA库都支持这一点。我推荐使用pmdarima,因为它是最友好的。
将模型安装到您的火车组上。
对测试集进行预测以验证p、d或q的特定选择。请注意,准确性估计值将向上偏移。(您可以通过拆分为训练、测试和验证来避免这种情况,但您可能没有足够的数据来执行此操作。)

相关问题