Facebook NeuralProphet - 从 pickle 加载模型进行预测

Facebook NeuralProphet - Loading model from pickle for prediction

我有一个每周作业,它从 csv 文件中读取数据并基于 NeuralProphet 创建模型并转储 pickle 文件以备后用。

from neuralprophet import NeuralProphet
from matplotlib import pyplot as plt
import pandas as pd
import pickle

data_location = /input_data/
df = pd.read_csv(data_location + 'input.csv')

np = NeuralProphet()
model = np.fit(df, freq="5min")

with open('model/neuralprophet_model.pkl', "wb") as f:
     # dump information to that file
     pickle.dump(model, f)

以上 python 代码每周运行一次,并将模型文件转储到一个文件中。

现在,我有一个不同的 python 文件,它加载 pickle 文件并对未来日期进行预测。

比方说,我在一个 csv 文件中有过去 2 年的数据,并从中创建了模型。现在,我想根据上述模型预测未来。

from neuralprophet import NeuralProphet
import pandas as pd
import pickle

with open('model/neuralprophet_model.pkl', "rb") as f:
     model = pickle.load(file)

# To get a next 1 hour prediction by 5mins interval 
future = model.make_future_dataframe(periods=12, freq='5min')
forecast = model.predict(future)

这是正确的吗?在这里,我没有将数据传递给 make_future_dataframe。但是,所有互联网示例也会传递数据。因为,数据是用来训练模型的,所以我只是在这里使用模型。为什么我们还需要在这里传递数据,因为我们使用基于模型的预测(对于某个未知的未来日期)?

NeuralProphet 模型(pickle 文件)只是一个训练有素的神经网络...最简单的类比是训练线性回归模型(来自 sci-kit learn 等)...y = Ax + b 其中你已经训练了 A 和 b 向量。没有 x,这些向量不能单独产生 y。本例中的模型只是 A 和 b 向量。现在neuralprophet使用的是自回归前馈神经网络,所以向量项比较多,而且不都是线性的

这就是为什么 NeuralProhpet 需要 model.fit 中的历史数据...历史数据是 x。 x 可以来自您用于训练 A 和 b 的相同数据集,或者 x 可以来自不同但统计相似的数据集(您可以使用 d-bar 测试来确定和置信区间来确定此处的相似性)。

这就是我们在大多数监督学习应用程序中使用模型的方式...在一个样本数据集上训练并应用于预测类似数据集的结果。