ARIMA 训练超慢

数据挖掘 机器学习 深度学习 时间序列 有马
2021-09-29 15:51:02

我现在在 24 CPU 200+GB RAM 云服务器上的 20 000 个元素数据集上拟合 ARIMA 模型(来自 statsmodels)超过 24 小时。它加载所有CPU。但它需要这么长时间......它是如何工作的还是这里有什么问题?

p,d,q 只是数字

from statsmodels.tsa.arima_model import ARIMA

for t in range(len(test)):
    model = ARIMA(history, order=(p, d, q))
    model_fit = model.fit(disp=1)
    output = model_fit.forecast()
    yhat = output[0]
    predictions.append(yhat)obs = test[t]
    history.append(obs)
1个回答

您可以在下面找到一个已解决的示例(在温度属性的单变量版本上),使用 statsmodels ARIMA,在尝试数小时后甚至无法完成执行。

关于性能问题,您可以选择使用另一个高效的库,如 Keras 和 Tensorflow 建模一个对时间序列数据有用的 LSTM,它能够处理如此多的样本而不会出现性能问题。

该数据集包含 420551 个样本,使用 ARIMA statsmodels 方法通过前向验证非常昂贵......您可以提取温度值以执行单变量时间序列预测。

请参阅下面的示例(基于本教程),暂时将超参数化放在一边,您可以训练近 50 万个时间序列样本而不会出现性能问题(您可以在 google colab 上免费试用以获得更快的检查)。从教程中的示例中,您应该特别注意:

  • 数据拆分方式:

def univariate_data(数据集,start_index,end_index,history_size,target_size):

data = []
labels = []

start_index = start_index + history_size
if end_index is None:
  end_index = len(dataset) - target_size

for i in range(start_index, end_index):
  indices = range(i-history_size, i)
  #### Reshape data from (history_size,) to (history_size, 1)
  data.append(np.reshape(dataset[indices], (history_size, 1)))
  labels.append(dataset[i+target_size])

return np.array(data), np.array(labels)

其中,使用 20 个样本作为最近的历史来预测您可以使用的下一个值:

univariate_past_history = 20
univariate_future_target = 0

x_train_uni, y_train_uni = univariate_data(uni_data, 0, TRAIN_SPLIT,
                                       univariate_past_history,
                                       univariate_future_target)
x_val_uni, y_val_uni = univariate_data(uni_data, TRAIN_SPLIT, None,
                                   univariate_past_history,
                                   univariate_future_target)

有类似的东西:

在此处输入图像描述

  • 模型的定义方式:

    simple_lstm_model = tf.keras.models.Sequential([ tf.keras.layers.LSTM(8, input_shape=x_train_uni.shape[-2:]), tf.keras.layers.Dense(1) ])

通过简单地预测历史值的平均值与基线模型进行比较,您有:

  • 基线模型仅基于过去值的平均值进行预测: 在此处输入图像描述

VS

  • 使用经过训练的 LSTM 模型进行预测:

在此处输入图像描述