如何使用 Python 进行时间序列预测

选择一个时间序列预测模型仅仅是开始。

在实践中使用所选模型可能会带来挑战,包括数据转换和将模型参数存储在磁盘上。

在本教程中,您将了解如何完成时间序列预测模型并使用它在 Python 中进行预测。

完成本教程后,您将了解:

  • 如何完成模型并将其及所需数据保存到文件。
  • 如何从文件加载已完成的模型并用它来进行预测。
  • 如何更新已完成模型的相关数据以进行后续预测。

开始您的项目,阅读我的新书 Python 时间序列预测入门,其中包括分步教程和所有示例的Python 源代码文件。

让我们开始吧。

  • 更新于 2017 年 2 月:更新了布局和文件名,以将 AR 案例与手动案例分开。
  • 2019 年 4 月更新:更新了数据集链接。
  • 更新于 2019 年 8 月:更新了 CSV 文件加载。
  • 2020 年 4 月更新:由于 API 更改,将 AR 更改为 AutoReg。
How to Make Predictions for Time Series Forecasting with Python

如何使用 Python 进行时间序列预测
照片由 joe christiansen 拍摄,保留部分权利。

预测流程

关于如何调整特定时间序列预测模型的内容有很多,但关于如何使用模型进行预测的帮助却很少。

一旦您能够为数据构建和调整预测模型,进行预测的过程就包括以下步骤:

  1. 模型选择。这是您选择模型并收集证据和支持以论证决定的地方。
  2. 模型定型。所选模型将在所有可用数据上进行训练,并保存到文件以供以后使用。
  3. 预测。加载已保存的模型并用于进行预测。
  4. 模型更新。在出现新观测值时,模型的要素会得到更新。

在本教程中,我们将逐一介绍这些要素,重点关注模型与文件的保存和加载,以及使用加载的模型进行预测。

在开始之前,我们先来看一个标准单变量数据集,以便将其作为本教程的背景。

停止以**慢速**学习时间序列预测!

参加我的免费7天电子邮件课程,了解如何入门(附带示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

每日女性出生数据集

此数据集描述了 1959 年加利福尼亚州每日女性出生人数。

单位是计数,共有 365 个观测值。数据集的来源归功于 Newton (1988)。

下载数据集并将其放在您当前的工作目录中,文件名为“_daily-total-female-births.csv_”。

我们可以将数据集加载为 Pandas 系列。以下代码片段加载并绘制数据集。

运行此示例将打印数据集的前 5 行。

然后将该序列绘制为线图。

Daily Female Birth Dataset Line Plot

每日女性出生数据集线图

1. 选择时间序列预测模型

您必须选择一个模型。

这是准备数据、执行分析并最终选择最能捕捉数据中关系的模型和模型超参数的工作重心所在。

在这种情况下,我们可以任意选择一个在差分数据集上滞后为 6 的自回归模型 (AR)。

我们可以在下面演示此模型。

首先,通过差分转换数据,每个观测值都转换为

接下来,AR(6) 模型将在 66% 的历史数据上进行训练。模型学习到的回归系数将被提取出来,并以滚动的方式应用于测试数据集以进行预测。

在测试数据集的每个时间步执行时,都会使用系数进行预测并存储。然后,该时间步的实际观测值将可用并存储起来,以用作未来预测的滞后变量。

运行此示例将首先打印预测的均方根误差 (RMSE),平均约为 7 个出生。

这就是我们期望模型在对新数据进行预测时平均能够达到的效果。

最后,创建一张图,显示测试数据集中的实际观测值(蓝色)与预测值(红色)的对比。

Predictions vs Actual Daily Female Birth Dataset Line Plot

预测值与实际每日女性出生数据集线图

这可能不是我们能为这个问题开发的最佳模型,但它合理且有技巧。

2. 定型和保存时间序列预测模型

模型选定后,我们必须对其进行定型。

这意味着要保存模型学到的关键信息,以便在需要进行预测时不必每次都重新创建它。

这包括首先在所有可用数据上训练模型,然后将模型保存到文件。

statsmodels 时间序列模型的实现通过调用已拟合的 AutoRegResults 对象的 save()load() 方法,提供了内置的保存和加载模型功能。

例如,下面的代码将在整个女性出生数据集上训练一个 AR(6) 模型,并使用内置的 save() 函数将其保存,该函数基本上会序列化 AutoRegResults 对象。

差分训练数据也必须保存,包括进行预测所需的滞后变量,以及 AutoRegResults 对象的 predict() 函数所需的观测数量信息。

最后,我们需要能够将差分数据集转换回原始形式。为此,我们必须跟踪最后一个实际观测值。这样,就可以将预测的差分值加到它上面。

此代码将创建一个文件 ar_model.pkl,您以后可以加载它并用它来进行预测。

整个训练数据集将保存为 ar_data.npy,最后一个观测值将保存为文件 ar_obs.npy,其中包含一个项目。

NumPy 的 save() 函数用于保存差分训练数据和观测值。然后可以使用 load() 函数加载这些数组。

以下代码片段将加载模型、差分数据和最后一个观测值。

运行此示例将打印系数和最后一个观测值。

我认为这对于大多数情况来说都很好,但也很笨重。您会受到 statsmodels API 更改的影响。

我倾向于直接处理模型的系数,如上面所示,使用滚动预测来评估模型。

在这种情况下,您可以只存储模型系数,稍后加载它们并进行预测。

下面的示例仅保存模型系数,以及进行下一次预测所需的最小差分滞后值和转换下一次预测所需的最后一个观测值。

系数保存在本地文件 man_model.npy 中,滞后历史保存在文件 man_data.npy 中,最后一个观测值保存在文件 man_obs.npy 中。

这些值随后可以如下加载:

运行此示例将打印加载的数据以供审查。我们可以看到系数和最后一个观测值与上一个示例的输出相符。

既然我们知道如何保存定型模型,我们就可以用它来进行预测。

3. 进行时间序列预测

进行预测包括加载已保存的模型并估计下一个时间步的观测值。

如果 AutoRegResults 对象已序列化,我们可以使用 predict() 函数来预测下一个时间段。

下面的示例显示了如何预测下一个时间段。

模型、训练数据和最后一个观测值将从文件加载。

将 period 指定给 predict() 函数,作为训练数据集末尾后的下一个时间索引。此索引可以直接存储在文件中,而不是存储整个训练数据,这可能是一种提高效率的方法。

进行预测,该预测是在差分数据集的上下文中进行的。要将预测值转换回原始单位,必须将其添加到最后一个已知观测值。

运行此示例将打印预测值。

我们还可以使用类似的技巧加载原始系数并进行手动预测。
完整的示例如下所示。

运行此示例,我们将获得与预期相同的预测值,因为底层的模型和预测方法是相同的。

4. 更新预测模型

我们的工作尚未完成。

一旦下一个实际观测值可用,我们就必须更新与模型相关的数据。

具体来说,我们必须更新:

  1. 用于输入以进行后续预测的差分训练数据集。
  2. 最后一个观测值,为预测的差分值提供上下文。

假设系列中的下一个实际观测值为 48。
新观测值必须首先与最后一个观测值进行差分。然后可以将其存储在差分观测值列表中。最后,可以将其值存储为最后一个观测值。

对于已保存的 AR 模型,我们可以更新 ar_data.npyar_obs.npy 文件。完整的示例列在下面:

我们可以对手动案例的数据文件进行相同的更改。具体来说,我们可以分别更新 man_data.npyman_obs.npy

完整的示例如下所示。

我们专注于一步预测。

这些方法同样适用于多步预测,通过重复使用模型并使用先前时间步的预测作为滞后输入来预测后续时间步的观测值。

考虑存储所有观测值

通常,跟踪所有观测值是一个好主意。

这将允许您:

  • 为进一步的时间序列分析提供上下文,以了解数据中的新变化。
  • 将来使用最新数据训练新模型。
  • 回测新的和不同的模型,以查看性能是否可以提高。

对于小型应用程序,您可以将原始观测值与模型一起存储在文件中。

您可能还希望将模型系数以及所需的滞后数据和最后一个观测值以纯文本格式存储,以便于审查。

对于大型应用程序,数据库系统可能可以用于存储观测值。

总结

在本教程中,您学习了如何使用 Python 完成时间序列模型并用它来进行预测。

具体来说,你学到了:

  • 如何将时间序列预测模型保存到文件。
  • 如何从文件加载已保存的时间序列预测并进行预测。
  • 如何使用新观测值更新时间序列预测模型。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

想用Python开发时间序列预测吗?

Introduction to Time Series Forecasting With Python

几分钟内开发您自己的预测

...只需几行python代码

在我的新电子书中探索如何实现
Python 时间序列预测入门

它涵盖了**自学教程**和**端到端项目**,主题包括:*数据加载、可视化、建模、算法调优*等等。

最终将时间序列预测带入
您自己的项目

跳过学术理论。只看结果。

查看内容

“如何使用 Python 进行时间序列预测” 的 77 条回复

  1. shamsul 2017年2月24日 上午7:35 #

    干得好,先生。

    是否可以使用 MIMIC II 数据库等 ICU 数据库来预测 ICU 患者状态?如果可以,能否请您指导我一下?

    谢谢你

  2. Hoang 2017年3月16日 上午5:50 #

    谢谢您的教程。

    我注意到当我运行以下代码时

    series = pd.read_csv(‘daily-total-female-births.csv’, header=0)

    print(series.head())
    series.plot()
    plt.show()

    我没有得到相同的图表。折线图显得更平坦,而且月份没有显示出来。教程中是否还有其他代码未显示?另外,我曾尝试使用 pyplot.show(),我将其更新为 plt.show(),代码运行正常。

    谢谢你的帮助。

    • Jason Brownlee 2017年3月16日上午8:04 #

      你好,Hoang,

      没有额外的代码。

      请确认您已安装最新版本的 Pandas 和 matplotlib。同时确认您的数据文件包含日期时间(date-times)和观测值,没有额外的数据或页脚信息。

  3. Hoang 2017年3月17日上午4:23 #

    谢谢 Jason,感谢您的快速回复。

    我使用的是 Pandas v0.19.2 和 matplotlib v2.0.0。

    额外的(不需要的)数据已在数据文件中删除(感谢您的建议),现在图表看起来非常相似,但日期丢失了。我猜是因为 x 轴显示的是索引。在我将 'Date' 设置为索引后,它得到了纠正。

    series=series.set_index(‘Date’)

    图表看起来不像您的图表,但已经足够接近了。

    • Jason Brownlee 2017年3月17日上午8:31 #

      很高兴听到您取得了一些进展,感谢您提供详细信息。这可能会帮助到其他人。

  4. Nelson Silva 2017年7月23日上午7:59 #

    你好 Jason,非常感谢您提供的精彩示例。
    我一直在玩博彩结果数据集,而这些初步预测非常有帮助。通常,在这些游戏中,根本没有任何倾向性,所有球都有相同的公平出线几率。您将如何处理此类预测,例如 Euromillions?
    在哪里可以找到更多高级时间序列预测的多变量案例?我想预测三个相互关联的变量的结果。类似此示例的代码将是完美的……

    谢谢你

    • Jason Brownlee 2017年7月24日上午6:46 #

      您是指彩票吗?我认为那是随机的,不可预测。

      一旦您将时间序列构建为监督学习问题,您就可以使用一系列机器学习方法。

      对于预测 3 个变量,我推荐使用神经网络模型。

  5. Jaskaran 2017年8月9日上午8:36 #

    嗨,Jason,
    一如既往的精彩内容。

    我有一个问题。

    1) 你为什么在这里不使用 ARIMA 模型而使用 AR?有区别吗?

    • Jason Brownlee 2017年8月10日上午6:38 #

      是有区别的,AR 不包括差分(differencing)和移动平均(moving average)。它是一种更简单的方法。

      这只是一个预测示例,您可以根据需要替换为 ARIMA。

  6. Martha 2017年8月22日上午3:33 #

    嗨,Jason,

    真是太棒了!

    # 进行预测
    predictions = model.predict(start=len(data), end=len(data))

    这里 start 的最小值应该是 window(此处为 6),并且小于 end 时间。

  7. Garrett Dabbs 2017年11月19日下午12:36 #

    “这些方法可以同样轻松地用于多步预测,通过重复使用模型并将先前时间步的预测作为输入滞后值来预测后续时间步的观测值。”

    你好,Jason!我对这种预测建模方法还不太熟悉,并且成功地运行了你的教程和示例,没有遇到任何问题。但是,当我还在研究它是如何工作的时,你能否指向一个能解释你上面引用的那句话的好例子?我明白 predict 函数查看 coef[0] 来执行其计算,而我们的预测方法提供了下一个时间步的预测,但如何告诉函数“查看它之后的下一个时间步……”等等?是 coef[1]…coef[n] 吗?

    如果这些是真的很愚蠢的问题,我深表歉意,我觉得它多么准确地预测真实世界数据,这一点非常吸引我,并且想进行统计分析,找出“长期预测”的准确性何时会急剧下降,我就是无法弄清楚如何请求比 1 更远的时间步。

  8. Sash 2018年3月27日上午8:57 #

    Jason – 精彩的示例。

    如果您想预测某一栋楼某一楼层的入住率,前提是您有过去一到两年所有入住和退出的时间序列数据,您会使用相同的方法吗?

    另外,如果您想从“现在”预测到未来 2-3 天的入住率,对于特定某一天,您会使用相同的方法吗?下一天或两天后的时间步会是什么样的?

    • Jason Brownlee 2018年3月27日下午4:17 #

      也许可以。尝试一下,看看它在您的数据上的表现。

  9. Sarthak 2018年5月12日上午3:35 #

    这是一个很棒的教程。我有一个问题,为什么你要转换数据?
    以及为什么使用差分?
    转换数据是否必要?

  10. Amresh 2018年8月27日下午8:26 #

    如何检查预测性能?

    • Jason Brownlee 2018年8月28日上午5:59 #

      您可以计算预测值与实际值之间的误差。

  11. Sabrina 2019年1月10日上午1:45 #

    你好,
    我需要您的建议,
    事实上,我有大量数据(近 200,000 条),我想预测大约 1,000 个点。
    哪种算法最合适?

    我的数据库是单变量的(只有一个数据向量)。
    如果您能指导我进行“在线预测”演示,并进行实时适应。

  12. M 2019年2月21日上午4:01 #

    嗨,
    我尝试了您的代码和您的数据集,但我似乎没有得到与您的代码相同的 RMSE。您是否在教程中遗漏了任何附加代码?

    谢谢
    ~M

  13. Abid Mehmood 2019年2月26日上午1:44 #

    尊敬的先生,
    我们如何绘制以时间为 X 轴的图表,而不是 CSV 文件中的整数?如果我直接读取 CSV 文件并绘图,它是有效的,但在任何预测模型之后,它总是以整数值绘制,但我想要以时间为 X 轴。
    提前感谢您,先生!

  14. Sam 2019年3月19日上午3:22 #

    你好 Jason,

    不确定如何修复以下错误

    maxlag 应为 27 model_fit = model.fit(maxlag=6,disp=False)

    • Sam 2019年3月19日上午3:23 #

      maxlag 应小于 nobs(观测值的数量)

    • Jason Brownlee 2019年3月19日上午9:00 #

      也许这与用于拟合模型的数据量有关?

      • Lindsey Tran (Belliveau) 2020年7月22日上午10:41 #

        嗨,Jason –
        如果没有足够的数据,这会是一个问题吗?
        我卡在了“maxlag 应小于 nobs”这一步,数据集大约有 20 个值。
        您能给我一些如何解决这个问题的建议吗?
        谢谢您,非常感激!
        Lindsey

  15. Sam 2019年3月19日晚上9:32 #

    嗨,Jason,

    感谢您的回复。我在这里很挣扎。

    我正在使用过去 3 年的周数据(156 个点)来检查预测与当年实际值(22 周)的对比。总共有 178 个点。如果模型有效,我打算在下一年使用它。数据也是季节性的。我猜我可以将此代码运行在 Power BI 上来获得多个站点(共 669 个)的预测吗?

  16. Kunal 2019年4月3日上午3:41 #

    你好,先生,

    这里有一个基本问题,为什么您要从前一个值中减去当前值?
    算法不是可以找出模式并帮助我们进行预测吗?

    另外,先生,我的 R2 值为 0.35,这可以吗,还是我应该继续努力?

    如果这是一个非常糟糕的问题,我真的很抱歉,但我是新人,所以才问。

    谢谢

  17. sridhar 2019年4月4日下午3:55 #

    如果有一个需要预测的因变量和一个没有时间信息的日期时间变量,以及一些分类和数值变量,我们是否可以将日期变量拆分为日、周、年、月,然后删除日期列来预测输出?如果是,转换后的日期时间变量将是什么类型的变量?

    • Jason Brownlee 2019年4月5日上午6:11 #

      通常,一旦数据具有一致的间隔/间距,我们就会删除日期/时间变量。

  18. Prakash Hullathi 2019年6月6日上午1:55 #

    嗨,Jason,

    感谢您提供有关 ARIMA 的良好信息。您能否告知我如何创建一个包含实际值、预测值和 95% 置信区间的 DataFrame?期待您的回复。

    此致
    Prakash Hullathi

  19. jesica 2019年6月25日下午2:45 #

    嗨 Jason,

    感谢您关于时间序列预测的精彩教程。
    您能告诉我是否可以使用支持向量回归(SVR)进行时间序列数据预测吗?

  20. Jamie 2019年8月26日晚上8:04 #

    我再次遵循了您的教程,这次非常仔细地复制了信息。
    我的操作系统是 Ubuntu 18.04。
    我进行了标准的安装,并且所有内容都已更新。
    我创建了一个 Python3 环境,并按照您的教程安装了所有必需的模块。
    我下载了数据集。
    这是我安装的模块版本。
    scipy: 1.3.1
    numpy: 1.17.0
    matplotlib: 3.1.1
    pandas: 0.25.1
    sklearn: 0.21.3
    statsmodels: 0.10.1
    训练集 93 个观测值,验证集 12 个观测值。

    当我执行您的代码时,我遇到了一个错误。

    File “complete.py”, line 47, in
    X = X.astype(‘float32’)
    ValueError: could not convert string to float: ‘1964-01’

    是这个教程的模块比我安装的旧,还是反之亦然?
    我需要一些帮助。这是唯一阻止我购买您的书籍的东西。

    • Jason Brownlee 2019年8月27日上午6:39 #

      是的,API 已经改变了。

      我已经更新了教程中的所有示例。

      谢谢。

  21. vergo 2019年9月5日晚上7:43 #

    ValueError: end is before start

    当我尝试查找观测值 48 的预测时,我收到了这个错误。
    您有解决方案吗?

    • Jason Brownlee 2019年9月6日上午4:56 #

      我在这里有一些建议可能会有所帮助

      考虑将代码积极削减到最低要求。这将帮助您隔离问题并专注于它。
      考虑将问题简化为一个或几个简单的例子。
      考虑寻找其他可行的类似代码示例,并慢慢修改它们以满足您的需求。这可能会暴露您的失误。
      考虑在 StackOverflow 上发布您的问题和代码。

  22. Peter Samoaa 2019年10月14日晚上8:17 #

    你好,
    让我们来讨论一下预测用户偏好频道(时间序列预测问题)的问题。假设我有很多用户,每个用户都有自己的频道列表。所以每个小时用户都会观看一个特定的频道(每个用户都有自己的行为)。在我的数据库中有超过 40,000 名用户,近 50 个频道。这 40,000 名用户实际上是超过 6000 万用户的集群。所以我们无法进一步聚类了。我找不到一种方法来构建一个模型,为每个用户在特定时间预测用户可以观看的频道。请记住,我已经为一名用户解决了这个问题(我的意思是,基于一名用户的数据,我构建了一个 LSTM 模型来预测用户在特定时间的偏好频道)。但问题已经推广到 40,000 名用户。我是否应该构建 40,000 个模型(即每个用户一个模型)?!或者有替代方案?!

    • Jason Brownlee 2019年10月15日上午6:13 #

      很好的问题。

      首先,这听起来像一个分类问题,例如,50 个频道就是 50 个类别。如果您正在对时间进行建模,这听起来像一个时间序列分类问题。

      您拥有大量数据,因此我建议测试一系列问题框架,看看哪种有效。例如,为每个客户、每个客户组、所有客户、每天、每周、所有时间等建模。

      然后,我们不知道问题的难度,所以从一个简单的模型开始,与线性模型、一些机器学习模型,甚至一些深度学习模型进行比较,看看每种框架的学习能力如何。

      这有帮助吗?

  23. HAO LIU 2019年12月10日上午7:59 #

    嗨,Jason,

    谢谢您的博文。

    我想问一下,是否有基于 LSTM 模型的长期时间序列预测的示例?
    是通过直接预测方法还是递归方法?

    期待您的回复!

    此致
    Hao

  24. Tanjil 2020年1月16日上午1:28 #

    你好,我到目前为止已经成功复制了您的图表。但是,而不是绘制实际和预测的出生率差异(第一部分结束),我想绘制出生率本身。我该怎么做?

    • Jason Brownlee 2020年1月16日上午6:20 #

      您可以调用 pyplot.plot() 并传入任何您想要的数据。

  25. riddhi 2020年6月4日下午3:10 #

    嗨,
    更新数据后,如何再次预测值?
    现在预测值是什么?
    我可以获得更新预测值的代码吗?

    • Jason Brownlee 2020年6月5日上午8:05 #

      您可以直接在您的模型上调用 predict() 或 forecast(),如上面教程中所述。

  26. amr 2020年7月19日晚上7:59 #

    我可以用这段代码来预测餐厅未来的销售额吗?

    • Jason Brownlee 2020年7月20日上午6:10 #

      也许可以尝试一下,看看它是否适用于您的数据集。

  27. John W. 2020年12月9日晚上5:22 #

    嗨,Jason,

    如果我们对数据执行 Dickey-Fuller 检验,结果表明该序列可能是平稳的。如果是这样,我们是否可以直接对实际数据进行 AR(即我们是否需要进行差分)?如果是,直接对实际数据进行 AR 模型是否就足够了,还是如果残差图上检测到模式,我们还需要对残差进行建模并将它们包含在预测中?

    • Jason Brownlee 2020年12月10日上午6:23 #

      是的,尝试一下,并将结果与对数据进行差分后的相同数据集进行比较。

  28. John W. 2020年12月12日晚上6:06 #

    嗨,Jason,

    在执行 DF 检验并对数据执行 AR 后,我绘制了实际数据和 yhat 数据。yhat 图只有微小的起伏(大部分数据集中在 40 或 41 左右),并且以某种方式穿过了实际数据(就像一条直线一样)。它没有像您上面给出的差分图那样的波动起伏。对残差的检验未能证明它是高斯的。

    我接着用 lag15 对残差进行了建模,并根据残差 AR 模型调整了预测。最终模型的 RMSE 为 6.736(而对数据进行差分并用残差 AR 模型调整预测为 7.499)。

    在执行修改后的预测后,对新残差的检验也未能通过正态性检验。

    因此,虽然我的 RMSE 得到了改进,但误差的分布仍然不是正态的。这是否值得担心?如果值得,您建议下一步该怎么做?

    • Jason Brownlee 2020 年 12 月 13 日 上午 5:58 #

      可能不是。

      下一步是继续测试数据准备、模型、模型配置,直到您用完时间和想法,或者获得足够好的结果/令项目利益相关者满意的结果。

  29. UMER HAMZA 2020 年 12 月 25 日 下午 8:41 #

    您好,老师……希望您一切安好。
    我是机器学习新手,我想使用 Python 根据过去的病例对 COVID-19 病例进行未来预测。我需要您提供建议,从哪里开始以及选择哪些特征。我将非常感谢您。

  30. Sean L 2021 年 2 月 28 日 下午 8:45 #

    这篇文章非常有帮助!但我想向您咨询一个问题。这是为 Flask Python 中的 LSTM 模型部署,我想用当前值进一步预测近期未来值,这让我卡了很久,请分享一些技巧!提前感谢~

    app.py

    from flask import Flask, make_response, request, render_template
    from pandas import DataFrame
    import io
    from pandas import datetime
    from io import StringIO
    import csv
    import pandas as pd
    import numpy as np
    import pickle
    import os
    from keras.models import load_model
    from sklearn.preprocessing import MinMaxScaler

    app = Flask(__name__)

    @app.route(‘/’)
    def form()
    return “””

    让我们尝试预测..

    插入您的 CSV 文件,然后下载结果

    预测

    """

    @app.route(‘/transform’, methods=[“POST”])
    def transform_view()
    if request.method == ‘POST’
    f = request.files[‘data_file’]
    if not f
    return “No file”

    stream = io.StringIO(f.stream.read().decode(“UTF8”), newline=None)
    csv_input = csv.reader(stream)
    for row in csv_input
    print(row)

    stream.seek(0)
    result = stream.read()
    df = pd.read_csv(StringIO(result), usecols=[1])
    df2 = pd.read_csv(StringIO(result))
    matrix2 = df2[df2.columns[0]].to_numpy()
    list1 = matrix2.tolist()
    # 从磁盘加载模型
    model = load_model(‘model.h5’)
    dataset = df.values
    dataset = dataset.astype(‘float32’)
    scaler = MinMaxScaler(feature_range=(0, 1))
    数据集 = scaler.fit_transform(数据集)
    dataset = np.reshape(dataset, (dataset.shape[0], 1, dataset.shape[1]))
    predict = model.predict(dataset)
    transform = scaler.inverse_transform(predict)
    dataFrame = DataFrame()
    dataFrame[‘Month’] = list1
    dataFrame[‘predicted value’] = transform
    ##df_predict = pd.DataFrame(transform, columns=[“predicted value”])

    response = make_response(dataFrame.to_csv(index = False, encoding=’utf8′))
    response.headers[“Content-Disposition”] = “attachment; filename=result.csv”
    return response

    if __name__ == “__main__”
    app.run(debug=True, port = 9000, host = “localhost”)

    • Jason Brownlee 2021 年 3 月 1 日 上午 5:34 #

      抱歉,我没有能力为您审查代码。

      • Sean L 2021 年 3 月 2 日 下午 7:07 #

        也许您可以与我分享一些关于这些问题的来源?

  31. John Johnston 2021 年 5 月 25 日 上午 7:05 #

    非常好的文章!谢谢您。

    在您制作图表的地方……“最后,创建了一个图表,显示测试数据集中的实际观测值(蓝色)与预测值(红色)的比较。”

    您能展示一下我们如何将原始的非差分测试数据与预测值绘制在同一尺度上吗?也就是说,绘制实际测试数据值与实际预测值。

    谢谢你

  32. Hala 2022 年 1 月 18 日 下午 10:52 #

    如何将观测数据(训练)与预测数据值绘制在同一张图上?
    这两个系列都从零值开始绘制,而不是连续绘制。

  33. Sambath Narayanan Parthasarathy 2022 年 9 月 3 日 下午 4:50 #

    Jason,您好,谢谢。很少有信息和代码。在去趋势、去除季节性影响后,如何以可解释的形式恢复原始数据?
    MAPE 和 RMSE 也需要此映射吗?

    我说得对吗?该如何进行?

Leave a Reply

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。