如何在 Python 中对时间序列数据进行归一化和标准化

如果您的时间序列数据具有一致的尺度或分布,某些机器学习算法将获得更好的性能。

您可以用来一致地重新缩放时间序列数据的两种技术是归一化和标准化。

在本教程中,您将学习如何在 Python 中将归一化和标准化重新缩放应用于时间序列数据。

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

  • 归一化的局限性以及使用标准化对数据的期望。
  • 需要哪些参数以及如何手动计算归一化和标准化值。
  • 如何在 Python 中使用 scikit-learn 对时间序列数据进行归一化和标准化。

通过我的新书《使用 Python 进行时间序列预测入门开启您的项目,其中包括逐步教程和所有示例的 Python 源代码文件。

让我们开始吧。

  • 2019 年 4 月更新:更新了数据集链接。
  • 2019年8月更新:更新了数据加载以使用新的API。
How to Normalize and Standardize Time Series Data in Python

如何在 Python 中对时间序列数据进行归一化和标准化
照片来源:Sage Ross,保留部分权利。

日最低气温数据集

此数据集描述了墨尔本市 10 年(1981-1990 年)的每日最低气温。

单位是摄氏度,共有3650个观测值。数据来源归功于澳大利亚气象局。

以下是数据的前 5 行样本,包括标题行。

以下是整个数据集的图。

Minimum Daily Temperatures

日最低气温

数据集显示出强烈的季节性成分,并且具有良好的、细粒度的细节可供使用。

本教程假设数据集位于您当前工作目录中,文件名为“daily-minimum-temperatures-in-me.csv”。

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

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

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

归一化时间序列数据

归一化是对数据从原始范围进行重新缩放,使所有值都在0到1的范围内。

当您的时间序列数据具有不同尺度的输入值时,归一化可能很有用,甚至在某些机器学习算法中是必需的。它可能适用于 k-最近邻等算法,这些算法使用距离计算以及线性回归和人工神经网络,这些算法对输入值进行加权。

归一化要求您知道或能够准确估计最小和最大可观测值。您可能能够从可用数据中估计这些值。如果您的时间序列呈上升或下降趋势,估计这些预期值可能很困难,并且归一化可能不是解决您问题的最佳方法。

值归一化如下

其中最小值和最大值与被归一化的值 x 相关。

例如,对于温度数据,我们可以猜测可观测的最小值和最大值分别为 30 和 -10,这两个值都大大高估和低估了。然后我们可以将任何值(如 18.8)归一化如下:

您可以看到,如果提供的 x 值超出最小值和最大值的范围,则结果值将不在 0 到 1 的范围内。您可以在进行预测之前检查这些观测值,并将其从数据集中删除或将其限制为预定义的最小值或最大值。

您可以使用 scikit-learn 对象 MinMaxScaler 来归一化您的数据集。

使用 MinMaxScaler 和其他重新缩放技术的良好实践如下:

  1. 使用可用的训练数据拟合缩放器。对于归一化,这意味着训练数据将用于估计最小和最大可观测值。这通过调用 fit() 函数完成。
  2. 将尺度应用于训练数据。这意味着您可以使用归一化数据来训练模型。这通过调用 transform() 函数完成。
  3. **将尺度应用于未来的数据**。这意味着您可以在未来准备新数据,您想对其进行预测。

如果需要,可以反转变换。这对于将预测转换回其原始尺度以进行报告或绘图非常有用。这可以通过调用 inverse_transform() 函数完成。

下面是归一化“每日最低气温”数据集的示例。

缩放器要求数据以行和列的矩阵形式提供。加载的时间序列数据以 Pandas Series 形式加载。然后必须将其重塑为具有 3,650 行的单列矩阵。

然后使用重塑后的数据集来拟合缩放器,对数据集进行归一化,然后反转归一化变换以再次显示原始值。

运行示例会打印加载数据集的前 5 行,显示归一化形式的相同 5 个值,然后使用逆变换将值转换回其原始尺度。

我们还可以看到数据集的最小值和最大值分别为 0 和 26.3。

还有另一种重新缩放类型,它对超出预期值范围的新值更具鲁棒性;这称为标准化。我们接下来将介绍这一点。

标准化时间序列数据

标准化数据集涉及重新缩放值的分布,使观测值的平均值为 0,标准差为 1。

这可以看作是减去平均值或居中数据。

与归一化一样,当您的时间序列数据具有不同尺度的输入值时,标准化可能很有用,甚至在某些机器学习算法中是必需的。

标准化假设您的观测值符合具有良好均值和标准差的高斯分布(钟形曲线)。即使不满足此预期,您仍然可以标准化您的时间序列数据,但您可能无法获得可靠的结果。

这包括支持向量机、线性回归和逻辑回归等算法,以及其他假设高斯数据或在高斯数据下性能有所提高的算法。

标准化要求您知道或能够准确估计观测值的均值和标准差。您可以通过训练数据估计这些值。

值标准化如下

其中 `mean` 计算如下

并且 `standard_deviation` 计算如下

例如,我们可以绘制“每日最低气温”数据集的直方图,如下所示:

运行代码会得到以下图,显示数据集的高斯分布,正如标准化所假定的那样。

Minimum Daily Temperatures Histogram

每日最低气温直方图

我们可以估计平均温度为 10,标准差约为 5。使用这些值,我们可以将数据集中第一个值 20.7 标准化如下:

数据集的均值和标准差估计比最小值和最大值对新数据更稳健。

您可以使用 scikit-learn 对象 StandardScaler 来标准化您的数据集。

下面是标准化“每日最低气温”数据集的示例。

运行示例会打印数据集的前 5 行,打印标准化后的相同值,然后打印转换回其原始尺度的值。

我们可以看到估计的均值和标准差分别为 11.1 和 4.0。

总结

在本教程中,您学习了如何在 Python 中对时间序列数据进行归一化和标准化。

具体来说,你学到了:

  • 某些机器学习算法在建模时性能更好,甚至需要重新缩放的数据。
  • 如何手动计算归一化和标准化所需的参数。
  • 如何在 Python 中使用 scikit-learn 对时间序列数据进行归一化和标准化。

您对重新缩放时间序列数据或此帖子有任何疑问吗?
在评论中提出您的问题,我将尽力回答。

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

Introduction to Time Series Forecasting With Python

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

...只需几行python代码

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

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

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

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

查看内容

对《如何在 Python 中对时间序列数据进行归一化和标准化》的 185 条回复

  1. Marek 2016 年 12 月 13 日 上午 8:48 #

    我假设这对于可以放入内存的数据集非常有效......但是对于根本无法放入单台机器的非常大的数据集呢?您会推荐其他技术吗?

  2. Fabio 2016 年 12 月 14 日 上午 5:53 #

    你好 Jason,

    谢谢你的例子。我正在学习 Python 和 Pandas。为什么你需要重塑 Series.values?

    # 准备数据以进行标准化
    values = series.values
    values = values.reshape((len(values), 1))

    再见

    • Jason Brownlee 2016 年 12 月 14 日 上午 8:29 #

      好问题,那是因为 sklearn 工具更喜欢 2D 矩阵,而 series 是 1D 的。

      我们只需要在 numpy 数组中明确指定行数和列数,sklearn 就不会抛出警告。

      这有帮助吗?

      • Fabio 2016 年 12 月 15 日 上午 12:26 #

        是的!谢谢你,Jason 🙂

  3. Barnett 2016 年 12 月 15 日 上午 8:40 #

    关于这个话题,您通常如何处理分类器(例如逻辑回归、SVM 等)中的混合类型变量(例如分类、连续、序数变量的混合)?我首先对分类变量进行虚拟编码,然后将其与其他变量(在将其归一化到 [0, 1] 之后)混合;不确定这是否是最佳实践。另一方面,对于应用聚类算法(例如 k-means、谱聚类),问题相同。谢谢。

    • Jason Brownlee 2016 年 12 月 16 日 上午 5:34 #

      嗨,Barnett,是的,正如您所描述的。

      如果存在序数关系,我尝试使用整数编码。

      对于分类变量,我使用虚拟(二元)变量。

      我尝试从多个不同的角度/视角来看待预测问题,包括变换、投影和特征选择过滤器。然后我在一系列方法上测试它们,看看哪些表示通常能更好地揭示问题的结构。在运行这些方法的同时,我进行传统的仔细分析,但这种自动化方法通常更快,并产生非直观的结果。

  4. Magnus 2017 年 1 月 5 日 上午 2:02 #

    我无法按原样运行此数据集。在 csv 文件中,有一个包含 3 列的页脚,并且某些数据包含问号。但是,在删除并替换它之后,它就可以工作了 :)

    • Jason Brownlee 2017 年 1 月 5 日 上午 9:23 #

      感谢您的提示,Magnus。

      是的,本教程确实假设一个格式良好的 CSV 文件。

      从 DataMarket 下载的原始文件确实包含必须删除的页脚信息。

  5. Kensu 2017 年 1 月 12 日 上午 1:30 #

    如果函数 y = (x – min) / (max – min) 是我们的归一化函数,那么反归一化的数学函数是什么?
    y = (x – min) / (max – min) 是我们的归一化函数。

    • pms 2019 年 1 月 22 日 上午 9:27 #

      解决 x

  6. sevenless 2017 年 1 月 31 日 下午 8:53 #

    感谢您的精彩教程。
    我想知道您如何对重复测量的标准偏差进行归一化?
    假设我们每天有三次测量而不是一次,并且您希望将温度归一化到其平均值作为单个月份的时间序列进行绘图。每天的标准偏差是否也必须归一化?

    • Jason Brownlee 2017 年 2 月 1 日 上午 10:49 #

      好问题,

      通常,这是一个特定于问题的问题,您可以选择标准化或归一化的时间段。

      我更倾向于选择适合每个变量整个建模周期的最小值/最大值或均值/标准差。

      尝试其他方法,看看它们在您的数据集上表现如何。

  7. Magnus 2017 年 2 月 17 日 上午 3:24 #

    假设我有一个时间序列,并将数据归一化到 0,1 范围。我训练模型并实时运行我的预测。后来,发生了“极端事件”,其值高于我训练集中的最大值。那么该事件的预测可能会饱和,导致我的预测低于观测值。如何处理这种情况?

    我想一种可能性是使用例如极端事件分析来估计未来的最大值,并将其用作我归一化的最大值。然而,这样我的训练数据将在一个更窄的范围内,例如 0 到 0.9。当然,无论有没有分析,我都可以这样做。我的问题与例如极端天气现象或地震等的预测有关。

    当训练集中没有极端事件时,如何才能准确预测极端事件?毕竟,极端事件通常对于预测非常重要。

    • Jason Brownlee 2017 年 2 月 17 日 上午 9:56 #

      好问题,Magnus。

      这是缩放时需要考虑的重要因素。

      标准化会更稳健。归一化需要您估计预期值的限制,以检测新输入数据何时超出这些限制并相应地处理(报告错误、裁剪、发出警告、使用新限制重新训练模型等)。

      至于“最佳”做法,这实际上取决于领域和您的项目要求。

      • Magnus 2017 年 2 月 20 日 下午 10:41 #

        如果数据高度不对称,具有负(或正)偏斜,从而远非高斯分布,该怎么办?

        如果我选择神经网络,我假设我的数据应该归一化。如果我对数据进行标准化,它仍然会偏斜,那么在使用神经网络时,最好转换数据以消除偏斜吗?或者神经网络对于偏斜数据来说是一个糟糕的选择?

        • Jason Brownlee 2017 年 2 月 21 日 上午 9:36 #

          考虑使用 Box-Cox 等幂变换使数据更接近高斯分布,然后进行标准化。

  8. Seine Yumnam 2017 年 4 月 2 日 上午 6:36 #

    我认为这种时间序列缩放方式行不通。例如,Python 中的标准化方法使用您提供的整个数据集来计算均值和标准差。但实际上,我们不会拥有这些。因此,这种缩放方式会存在前瞻性偏差,因为它使用过去和未来的数据来计算均值和标准差。所以我们需要想办法根据给定时间点的数据来计算均值和标准差。

    • Jason Brownlee 2017 年 4 月 4 日 上午 9:04 #

      是的,您最好根据领域知识估计缩放所需的系数。

  9. DharaPJ 2017 年 4 月 4 日 下午 8:18 #

    如果代码显示“没有名为 sklearn.preprocessing 的模块”怎么办?我已经下载了 scipy 0.18.1 版本。

  10. Riccardo 2017 年 4 月 5 日 上午 1:43 #

    你好 Jason,谢谢你的出色工作。
    我有一个问题:如何正确归一化用于外汇交易的训练、验证和测试数据集?这些数据集按时间顺序分割,因此训练先于验证,验证先于测试。我不想使用未来数据进行归一化,因为我不需要使用未来信息来预处理我的数据......
    现在我使用强化学习的结果不尽如人意,但我认为很大一部分工作是通过良好地归一化我的数据集来完成的。
    我现在的策略是使用前三周的均值和标准差,对每个训练/测试/验证回合(一周数据)进行标准化...

    • Jason Brownlee 2017 年 4 月 9 日 下午 2:31 #

      我建议根据训练数据和领域知识估计最小值/最大值或均值/标准差,并手动缩放数据。

      • Riccardo 2017 年 4 月 20 日 上午 1:32 #

        感谢您的回复。这正是我现在正在做的。可能除了领域知识之外,没有其他标准可能性。找到一些标准的东西会很有趣,但这似乎不可能。

  11. Seo Young Jae 2017 年 4 月 24 日 下午 12:45 #

    感谢您提供的好信息!

    而且……我可以标准化和归一化名义(分类)变量吗?

    • Jason Brownlee 2017 年 4 月 25 日 上午 7:41 #

      我很高兴您觉得它有用。

      您可以将名义变量编码为整数,然后使用独热编码。

  12. GEORGIOS PLIGOROPOULOS 2017 年 6 月 15 日 上午 11:02 #

    如果我的所有时间序列都有上升趋势怎么办?或者更糟糕的是,如果我一半的时间序列有上升趋势,而另一半有下降趋势呢?

    对时间序列进行去趋势化会有帮助吗?(“移除”斜率并减去平均值)
    如果是,哪种去趋势化会有用?我应该将每个序列与其他所有序列分开去趋势化,还是将它们全部一起去趋势化,还是分组去趋势化?

    但这看起来不像归一化/标准化,因为如果您对每个序列单独执行此操作,您将丢失信息,无法还原该过程。

    您对此方法有何看法?谢谢

  13. Marianico 2017 年 7 月 12 日 下午 10:51 #

    但如果你用这种方式进行归一化,你就会利用到未来的信息,因此模型会过拟合。比如说,你用列的均值和标准差来归一化数据以训练模型,但是新的输入数据不能按照旧的(因为趋势或标准差等原因),也不能按照新的(最后N行的均值和标准差)标准进行归一化。

    不如试试这个:https://scikit-learn.cn/stable/modules/preprocessing.html#custom-transformers

    • Jason Brownlee 2017年7月13日上午9:55 #

      是的,我建议仅使用训练数据来估计归一化系数(最小值/最大值)。

      • Marianico 2017年7月13日晚上8:15 #

        好的,这说得通。但即使使用你的训练数据,你也会遇到同样的问题:在使用时间序列数据集时,如果你使用整个训练数据集的最小值/最大值进行归一化/缩放,你也将考虑到未来数据的值,而在实际预测中你将无法获得这些信息,对吗?

        此外,你将如何归一化/缩放未来数据?是使用你训练数据中保存的预处理模型,还是使用最后N行创建新的MinMaxScaler()?如果新值与训练值略有不同怎么办?

        这就是我发布log1p解决方案的原因,它与log(1+x)相同,因此适用于(-1;∞)。或者这个怎么样
        http://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick/

        我认为你在帖子中指出这一点会很有趣,因为我担心它可能会极大地影响模型的准确性……

        • Jason Brownlee 2017年7月14日上午8:27 #

          这就是我的观点。如果进行归一化,你需要根据可用数据和领域知识(以猜测可能出现的最大/最小值)来选择最小值/最大值。

          标准化时估计均值/标准差也是同样的思路。

          如果评估模型,这些估计值应仅来自训练数据和/或领域专业知识。

          希望这样更清楚。

  14. Marianico 2017年7月13日晚上9:27 #

    我认为最好的方法如下

    scaler = StandardScaler() # 或 MinMaxScaler()

    scaler_train = scaler.fit(X_train)
    X_train = scaler_train.transform(X_train)

    scaler_full = scaler.fit(X) # X_train + X_test
    X_test = scaler_full.transform(X_test)

    延伸阅读

    https://www.researchgate.net/post/If_I_used_data_normalization_x-meanx_stdx_for_training_data_would_I_use_train_Mean_and_Standard_Deviation_to_normalize_test_data
    https://stats.stackexchange.com/questions/267012/difference-between-preprocessing-train-and-test-set-before-and-after-splitting/270284
    http://sebastianraschka.com/Articles/2014_about_feature_scaling.html

  15. pranav 2017年7月14日上午5:30 #

    嗨 Jason,感谢您的帖子。
    我有一个问题。
    我有时间戳和系统运行时间,其中运行时间是系统在其生命周期内运行的#小时。
    现在我必须根据系统的使用年限或系统运行时间来预测系统故障。
    故障次数可能会根据系统的使用年限或运行小时数而增加。
    我的训练数据有限,训练数据中的最大运行时间是1,000小时,使用年限是1,200小时。但在实际操作中,它可能会超过100,000小时,使用年限可能会超过150,000小时。
    我如何标准化时间戳和运行时间。

  16. Kyana 2017年8月23日晚上7:17 #

    嗨,Jason,

    感谢您的全面解释。我有一个有噪声的时间序列,包含缺失数据和异常值。甚至不确定数据是否正态。标准化在我的情况下有效吗?我的样本量可能很大。期待您的反馈。

    • Jason Brownlee 2017年8月24日上午6:28 #

      嗯,也许不行。但我通常建议进行测试并获取数据,而不是听取意见/建议。我经常出错。

      也许可以尝试修补缺失数据并修剪异常值作为次要步骤,看看这是否会影响模型技能。

      告诉我进展如何。

  17. Sebastian 2017年8月23日晚上7:45 #

    您好!我未能使 MinMaxScaler 适用于我的 5 阶张量。有人知道如何在张量的所有维度上进行缩放吗?我猜你可以先将其扁平化,然后进行缩放,再将其重塑回来。但我宁愿不被所有维度搞混。我目前所做的是自己编写一个归一化函数来缩放 numpy 张量,以防有人遇到同样的问题。

    class normalize():

    def fit(self, train, interval=(0,1))
    self.min, self.max = train.min(), train.max()
    self.interval = interval

    return self

    def transform(self, train, val, test)

    def trans(x)
    y = ((self.interval[1]-self.interval[0])*x + \
    (self.interval[0]*self.max-self.interval[1]*self.min)) / \
    (self.max-self.min)
    return y

    train_norm = trans(train)
    val_norm = trans(val)
    test_norm = trans(test)

    return train_norm, val_norm, test_norm

    def inverse_transform(self, train_norm, val_norm, test_norm)

    def inv_trans(y)
    x = ((self.max-self.min)*y + \
    (self.interval[1]*self.min-self.interval[0]*self.max)) / \
    (self.interval[1]-self.interval[0])
    return x

    train = inv_trans(train_norm)
    val = inv_trans(val_norm)
    test = inv_trans(test_norm)

    return train, val, test

  18. Joel Bernstein 2017年10月28日上午8:18 #

    你好,

    在进行诸如聚类等机器学习操作之前,将时间序列转换为单位向量也是一种有效的方法吗?

    谢谢,
    乔尔

    • Jason Brownlee 2017年10月29日上午5:49 #

      也许吧,试试看它对模型技能有什么影响。

      • Khalid Usman 2018年5月27日晚上10:19 #

        嗨 @Jason,

        1. 时间序列数据与其他数据在归一化和标准化方面有什么区别?

        2. 我们应该对时间序列数据进行归一化、标准化,还是两者都进行?

        3. 您能否更新这个非常好的教程,加入“如何保存数据归一化和
        标准化并将其用于测试数据”?

        谢谢,
        哈立德

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

          没有区别,只是您可能需要考虑增加的水平(趋势)。

          取决于算法和数据,尝试两者并评估效果。

          您可以使用 NumPy 或 Pandas 保存序列。

  19. nson28 2017年11月24日晚上5:04 #

    嗨,Jason,
    我只想问一下,数据归一化是否只发生在训练期间?在没有提供输出数据的测试期间,我是否仍然需要归一化数据?谢谢。

    • Jason Brownlee 2017年11月25日上午10:13 #

      很好的问题。

      在训练之前对数据执行的任何转换,也必须对测试数据或任何其他数据执行。

  20. Hitendra 2018年3月15日晚上6:55 #

    基于时间序列数据的交通流量分析需要什么样的预处理?我指的是高速公路局网络行程时间和交通流量数据,包含9个字段,即链接参考、链接描述、日期、时间段、平均行程时间、平均速度、数据质量、链接长度、流量等。对于2015年1月至3月这3个月的数据,应该尝试哪些技术进行预处理?谢谢

    • Jason Brownlee 2018年3月16日上午6:11 #

      也许可以尝试几种方法,看看哪种方法能使模型技能更好。

  21. Shubham Jaiswal 2018年4月3日下午2:56 #

    你试过使用 (from sklearn.preprocessing import Imputer) 函数吗?
    它比这个更好,还是说它们是相同的?

  22. suresh 2018年4月25日下午5:21 #

    我们基于什么选择数据缩放方法(归一化/标准化)?

    • Jason Brownlee 2018年4月26日上午6:22 #

      标准化适用于高斯数据。

      归一化可用于高斯或非高斯数据。

      缩放适用于使用距离或权重的方法。

      如有疑问,请比较有无缩放的模型技能。

  23. Maher Selim 2018年5月16日上午4:17 #

    在训练会话期间,使用 sklearn 中的 MinMaxScaler 模型来归一化模型的特征,是否可以将缩放器保存起来,然后在预测会话中从文件中加载它,例如,这可能吗?这是一个好的解决方案吗?

    https://stackoverflow.com/questions/41993565/save-minmaxscaler-model-in-sklearn

    有没有更有效的方法?

    • Jason Brownlee 2018年5月16日上午6:07 #

      我建议保存系数或通过 pickle 保存对象。

      • Maher Selim 2018年5月17日上午12:21 #

        感谢您的建议

  24. Marko Dinic 2018年5月24日晚上11:48 #

    嗨,Jason,很棒的文章。

    一个总是困扰我的问题是,当您有多个实例,每个实例具有多个参数时,如何正确地标准化数据?例如,您正在测量 N 个设备在 T 秒内的 M 个参数(时间序列),并且您希望对这些设备进行一些分析/机器学习。在这种情况下,您将如何标准化数据?

    谢谢!

    • Jason Brownlee 2018年5月25日上午9:28 #

      这取决于您如何建模数据,例如每个传感器一个模型,一组传感器,所有传感器。

      按变量和模型标准化。

      这有帮助吗?

      • Marko Dinic 2018年5月31日晚上6:28 #

        嗨,Jason,

        感谢您的回复。所以想法是拥有一个模型,它包含所有参数(传感器)的值,以便也能够整合参数之间的关系。

        当您说按变量和模型进行标准化时,在这种情况下意味着什么?是为单个参数的所有值(属于不同实例)找到最小值/最大值或均值/标准差吗?也就是说,为所有实例的单个参数的所有值找到一个统计量?是“按数据集”而不是“按实例”标准化参数吗?

        再次感谢!

        • Jason Brownlee 2018年6月1日上午8:16 #

          是的,如果您选择单独建模传感器,则每个变量和模型都要进行。

  25. Neelesh 2018年5月29日上午10:13 #

    感谢您的帖子,非常有帮助。

    我正在使用 sklearn 的 Normalizer 在预测前对数据进行归一化。我们如何将预测数据恢复到原始值?

    谢谢你

  26. Tom 2018年6月7日上午12:14 #

    嗨,Jason,
    如何对包含 NaN 值的 DataFrame 中的列进行归一化?
    谢谢,
    汤姆

  27. Jack 2018年7月6日下午2:38 #

    你好 Jason,

    您是否只对值字段进行归一化/标准化?还是对时间序列也进行?

    另外,我在我的值字段上运行了标准化/归一化,当绘图时,它返回了完全相同的直方图,这不意味着要归一化数据吗??

    谢谢

    • Jason Brownlee 2018年7月7日上午6:11 #

      对于单变量数据,我们准备整个序列。

      当对高斯数据进行归一化和标准化时,形状将相同,但最小值/最大值将不同。

  28. Nilesh 2018年7月7日下午5:21 #

    嗨 Jason

    感谢这篇很棒的教程。我一直收到错误“无法将大小为 7300 的数组重塑为形状 (3650,1)”。

    我尝试了其他示例数据集,也出现了这个错误。

    我是不是漏掉了什么?

  29. Cena 2018年9月6日上午8:01 #

    你好,Jason。

    我有一个 n*n*n 矩阵,包含一个样本、时间步、股票市场特征。

    你将如何在 n*n 维度中标准化时间序列数据并为 LSTM 做准备?

    谢谢,

    • Jason Brownlee 2018年9月6日下午2:10 #

      不确定您的数据维度代表什么。通常,重新缩放每个序列,例如,按序列重新缩放。

  30. Arpit 2018年10月3日上午2:14 #

    你好 Jason,
    很棒的教程。但我有一个问题,可能会有多个异常值影响均值,进而影响归一化和标准化,那为什么我们不使用中位数呢?因为它不易受异常值影响,会产生更稳健的结果?

    • Jason Brownlee 2018年10月3日上午6:21 #

      对于具有异常值的高斯分布数据来说,这听起来是个好主意。

  31. Duy Tân 2018年11月6日上午8:17 #

    我们是否也应该对输出(y)进行归一化?或者只对输入(X)进行归一化就可以了?

    • Jason Brownlee 2018年11月6日下午2:16 #

      是的,输出或目标变量应该被标准化或归一化。

  32. sha453 2018年11月15日下午12:11 #

    日期会自动归一化吗?

  33. Alex 2018年11月20日上午11:42 #

    很棒的文章。

    Jason,关于标准化和平稳性转换结果之间的差异,有一个问题。难道数据在以均值为中心且变异稳定时才被认为是平稳的吗?这似乎是标准化转换的结果。

    提前感谢您的澄清,抱歉提出愚蠢的问题)

  34. Murat 2019年1月29日上午11:12 #

    感谢另一篇很棒的文章。

    为什么不是“缩小”而是归一化?
    x………………….y
    如果数组中包含负值 [5, -7, -3, 6, 7, 9, 10]
    缩小后…………………………..[..-0.7……………….1]
    如果我归一化…………………………………..[…..0………………..1]

    在缩小中,我保留了 -7 的权重(为 -0.7)以将我的 Fx 拉向西/负方向
    在归一化中,-7 变为 0,10 变为 1……

    -7 将没有任何权重

    • Jason Brownlee 2019年1月29日上午11:42 #

      是的,通常只有少数值在边界上。如果您有很多值在边界上,也许可以归一化到不同的范围。

  35. Murat 2019年1月29日上午11:13 #

    -7 在我的方程中将没有权重 -0.7x 对比 0.x……同时 10y 将是 1.y 一直拉向东方……

    • Jason Brownlee 2019年1月29日上午11:43 #

      是的,也许只是标准化或将归一化范围移至 [-1, 1] 或 [0.1, 0.9],看看它是否对模型技能产生影响。

  36. Dennis Cartin 2019年2月20日晚上9:44 #

    嗨 Jason

    又是我。您的忠实追随者。

    使用归一化特征变量预测的值(目标值)是否是归一化值?或者我们需要转置预测值吗?

    再次感谢。

  37. Dennis Cartin 2019年2月21日下午5:22 #

    嗨,Jason,

    抱歉让你困惑。我的意思是,当我们对我们不知道的保留目标值进行预测时,并且我们的预测器或特征变量是归一化的。我们的预测输出是归一化值,我们需要在提交比赛之前进行逆变换吗?

    谢谢你,Jason。

  38. Suraj 2019年4月13日下午1:20 #

    缩放范围是否依赖于激活函数?例如,我有 X_train 和 Y_train。X_train 和 Y_train 具有 (-2,2) 之间的正值和负值。Tanh 激活函数的值可以在 (-1,1) 之间。类似地,ReLU 只能具有大于 1 的正值。

    如果我使用 Tanh 激活函数,我应该将数据缩放到 (-1,1) 范围吗?类似地,对于 ReLU 激活函数,是否需要将数据缩放到 (0,1) 之间?

    我使用 ReLU 激活函数处理缩放到 (0,1) 之间的数据时遇到了问题。对于 (0,1) 缩放,使用 ReLU 激活函数时解决方案会发散。但是,如果我使用 (-1,1) 缩放的 ReLU 激活函数,解决方案不会发散。

    谢谢你。

    • Jason Brownlee 2019年4月13日下午1:50 #

      通常情况下,是的。

      不过,我建议使用能带来最佳结果的方法,而不是教条。

  39. Suraj Pawar 2019年4月13日下午2:05 #

    谢谢,Jason。我想知道缩放是否会导致预测结果爆炸?如果我改变缩放范围,解决方案就不会爆炸。或者,预测结果的爆炸是否与激活函数的选择有关?
    谢谢你。

    • Jason Brownlee 2019年4月14日上午5:42 #

      是的,两者都有。我建议仔细选择激活函数,然后相应地缩放数据。然后改变缩放/配置,看看它如何影响模型性能。

  40. Constantine 2019年4月20日上午6:13 #

    你好,

    我想问一下:您对数据进行缩放的方式(即使用整个训练集)本质上是不是利用了未来的信息来缩放过去的信息?我的意思是,如果您使用2月28日之后的数据点并获取整个数据集的均值,然后用它来缩放2月28日之前的数据点,这难道不是通过使用在2月底之前实际上不可用的信息(来自未来)来进行“作弊”吗?这难道不像使用(不可用)的2020年信息(来自未来)来缩放我当前(现在)2019年的数据吗?

    谢谢!

    • Jason Brownlee 2019年4月20日上午7:44 #

      没错,你应该在训练集上准备缩放,并将其应用于训练和测试。

      为了简洁起见,我通常一次性完成。

      • Constantine 2019年4月24日上午4:38 #

        感谢您的回答!我还想问一下,如果我基于原始时间序列创建了多个特征(例如不同时期股票价格回报的移动平均线),最终得到多元时间序列,我应该如何进行缩放(针对训练集和测试集)?我应该先缩放原始时间序列训练集,然后再创建其他特征吗?还是以其他方式?

        谢谢!

        • Jason Brownlee 2019年4月24日上午8:09 #

          先缩放,然后移位。

          • Constantine 2019年4月25日上午1:23 #

            你的意思是先在整个原始时间序列数据集上进行缩放,然后再进行训练/测试集划分吗?还是在原始数据集的一部分上进行,也就是我将用于训练的部分?

            另外,您是否有机会在帖子中加入一个小章节,专门讨论多元时间序列(或非时间序列)的缩放?还是说这很明显,我错过了什么?

            非常感谢!

          • Jason Brownlee 2019年4月25日上午8:20 #

            在训练数据集上计算缩放统计量,在转换为监督学习问题之前缩放列。

            这是一个例子
            https://machinelearning.org.cn/machine-learning-data-transforms-for-time-series-forecasting/

  41. Constantine 2019年4月25日晚上9:17 #

    好的,如果我理解正确,工作流程应该像这样,如果有误请纠正我

    初始单变量时间序列 -> 计算其训练部分(例如90%)的缩放统计量 -> 对整个单变量时间序列应用缩放 -> 然后计算各种其他指标,将数据集转换为多变量。(这对我来说更有意义)。

    或者

    初始单变量时间序列 -> 计算各种指标,将数据集转换为多变量 -> 根据其训练大小(例如90%)单独缩放每列。

    另外,我想问一下什么时候对模型的预测进行逆变换以计算误差指标,因为这对我来说也有点困惑。我是否必须对我的 y_pred 进行逆变换并与原始 y_test 进行比较?我相信您也有一篇关于此的帖子,但我不记得是哪一篇了。

    非常感谢,抱歉打扰您!

  42. Birish 2019年5月11日下午5:00 #

    对于时间序列,MinMax归一化和标准化是否可以得到完全相同的值?

    https://stackoverflow.com/questions/56084988/zscore-v-s-minmax-normalization-why-their-results-look-the-same

  43. Emin 2019年5月31日上午3:59 #

    Jason,

    先对数据进行标准化,然后再对数据进行幂变换是一种可接受的做法吗?或者通常是二选一?

  44. Emin 2019年5月31日上午4:02 #

    我之所以问这个问题,是因为我将标准化应用于lasso特征选择。现在我想对那些选定的滞后应用PT。我在文献中找不到任何类似的东西。谢谢。

  45. Dhiraj 2019年6月24日下午2:57 #

    我想将归一化数据保存为文件,因为我需要将该数据输入到CNN。如何实现?欢迎提出想法。

  46. Paul 2019年6月28日下午9:13 #

    嗨,Jason,你有什么方法可以将10分钟的传感器数据集与故障数据集结合起来吗?我想将它们按时间戳连接,但故障数据只有开始和停止字段。谢谢,Paul。

    • Jason Brownlee 2019年6月29日上午6:48 #

      也许是SQL中的数据库连接?

      也许是numpy中的hstack()?

  47. Prem Alphonse 2019年8月1日下午3:14 #

    嗨,Jason,
    数据归一化通常与目标列无关,例如minmax单独应用于每个列,同样均值和标准差也特定于该列,

    有没有一种方法可以根据目标对预测变量进行归一化?
    谢谢

  48. Zach 2019年8月10日上午3:23 #

    这不就是简单的归一化和标准化吗?我想大多数时间序列数据都是非平稳的,这意味着分布的方差随时间变化。对滚动窗口进行标准化以反映这种非平稳数据是一种好做法吗?

    • Jason Brownlee 2019年8月10日上午7:22 #

      是的。

      是的,好问题。如果可能,最好在缩放之前使数据非平稳。

      • Andrew 2022年4月2日上午2:08 #

        嗨,Jason,感谢您又一篇出色的实现文章。我有一个关于时间序列数据缩放(归一化)的类似问题,用于滚动预测。在这种情况下,我想X块特征和y目标值应该分开归一化吗?

        再次感谢您的精彩帖子。

  49. Nel 2019年8月29日上午12:23 #

    感谢这篇文章。我有一个问题:如果我们要进行视频分类,并且每个视频提取50帧,我们如何应用标准化?我的意思是,我们应该单独标准化每个主体的每一帧,还是将一个主体的所有帧一起标准化,还是……

  50. Tiago 2019年9月2日下午8:55 #

    你好,谢谢你的文章。

    我想问一下,在进行标准化之后,是不是不可能期望数据的范围?最有可能的是在[-3, 3]之间,但也有可能超出这个范围,对吗?

  51. ct.zhang 2019年10月17日上午1:22 #

    好文章,非常感谢你的努力。我能问一个问题吗?我的数据看起来像这样 https://drive.google.com/open?id=1Cqat4Aw2noexzGipfieF-y2S-Iu4jWjF

    我可以绘制这些数据的直方图,直方图看起来明显不是高斯分布。我尝试了boxcox变换,但变换后的数据仍然不像高斯分布。你有什么办法能让这些数据看起来更像高斯分布,以便我能建立一个机器学习模型来预测未来吗?

    提前感谢。

    • Jason Brownlee 2019年10月17日上午6:38 #

      数据不一定是高斯分布才能使用机器学习方法。许多非线性方法不对数据形式做任何假设——例如,尝试决策树、SVM或knn!

  52. Jb 2019年11月6日上午7:02 #

    你好,杰森,

    我有一个rssi样本数据集。它是一个时间序列数据,包含更多的噪声内容。现在,我感兴趣的是从中提取模式。如何通过应用归一化来实现?

    • Jason Brownlee 2019年11月6日下午2:16 #

      上面的例子展示了如何归一化时间序列数据集。

      你到底遇到了什么问题?

  53. Goksu Yamac 2019年11月20日下午10:47 #

    嗨,Jason,

    感谢这篇文章。我有一个关于我正在构建的模型的问题。我正在使用滑动窗口方法输入时间序列数据。因此,每个样本都包含时间序列数据中的多个值,即y(t) = [x(t),x(t-1),x(t-2)]。在这种情况下,我需要在应用滑动窗口之前还是之后对时间序列数据进行归一化?我认为后者更有意义,因为它确保数据集中每个特征都经过归一化,但前者确保时间序列数据本身经过归一化。我非常想听听你对此的看法。非常感谢!

    • Jason Brownlee 2019年11月21日上午6:06 #

      您可以在使数据进行监督/滑动窗口之前对数据进行缩放。

  54. John White 2019年12月7日下午3:41 #

    嗨,Jason,

    所以我们可以对训练/测试数据集分别进行fit_transform和transform,以输入到训练模型中。预测后,由于模型是根据缩放数据训练的,我们是否也需要对预测进行inverse_transform?谢谢!

  55. John White 2019年12月8日下午9:21 #

    谢谢!这些文章非常有帮助。我觉得我读得越多关于时间序列预测以及如何准备我的时间序列数据,就越会感到困惑。我目前的数据集包含多变量独立特征,试图预测一个变量。我设置了训练集和测试集,并在将其拟合到SVR模型之前对这些集合进行缩放/变换。现在我看到一些例子,人们在缩放/变换之前进行reshape,例如np.reshape(-1,1)。这是必要的吗?reshape如何与多变量特征联系起来?这与我遇到的一个错误有关,因为我正在预测一个变量,它最终是一个1维数组。因此,如上所述,我尝试对这个y_pred进行inverse_transform,但sklearn转换器抛出一个错误,说“预期2维数组”。

    • Jason Brownlee 2019年12月9日上午6:51 #

      谢谢。

      是的,sklearn转换器总是期望2维数据,行和列。

  56. John White 2019年12月9日下午12:57 #

    啊,我明白了。那么,在处理多变量特征到SVR模型时,reshape不是必要的,或者我们为什么要reshape模型的输入数据?

  57. Manish 2020年2月6日下午11:48 #

    假设我们的牛奶产品需求与降雨量直接相关。那么
    我必须使用可用的降雨数据来估计产品次日的销售量。
    我正在做的是,由于2019年和2018年的需求与2020年的需求不同,我通过减去2019年1月数据集的均值并除以标准差来标准化2019年的需求。然后搜索与特定降雨量相对应的需求。现在我已经在标准化值上训练了模型,然后在进行预测时,我必须对序列进行反标准化。
    所以我的问题是,哪个系列用于计算预测数据集反标准化的均值和标准差。
    请帮助

    • Jason Brownlee 2020年2月7日上午8:19 #

      您可以选择预测任务的框架。

      例如,您可以选择根据前几个月的数据或前一年的值等进行标准化预测。只要您保持一致,应该没有问题——如果我正确理解了您的问题。

      • Manish 2020年2月7日下午3:07 #

        嗨,Jason,谢谢你的回复。

        我正在做的是使用2019年1月的降雨量和销售数据集来预测2020年1月的销售量(因此我没有测试数据,我正在进行实时预测)。由于2019年和2020年的销售量不同(因为每年的销售量都在增加),为了避免这种差异,我标准化了训练集,即2019年1月的销售量,并使用2019年1月的降雨数据对这些标准化值训练了模型。现在我有了2020年1月的降雨预测(来自NWP)来预测2020年1月的销售量,我的问题是——
        由于我是在标准化值上训练模型的,所以我的预测也将是标准化值,例如(-1.4,0.8,0.9等)。那么我应该使用哪个数据集来反标准化我的预测呢??
        请帮助

        • Jason Brownlee 2020年2月8日上午7:03 #

          如果你使用2019年1月的数据进行标准化,那么你使用相同的系数(来自2019年1月)进行反变换。

  58. Lub 2020年2月19日下午12:08 #

    谢谢您的文章。
    我有一个关于使用“留出验证”方法进行交叉验证时数据标准化的问题。您是计算整个数据集(测试数据集+学习数据集)的均值和标准差,以及测试数据集的均值/标准差和学习数据集的均值/标准差吗?

    • Jason Brownlee 2020年2月19日下午1:33 #

      理想情况下,应按训练集的每个变量进行。

  59. Sharon 2020年5月12日下午10:36 #

    嗨,Jason。感谢您的文章,非常有帮助。我只是有一个关于标准化的问题。是应该对整个数据集进行标准化还是只对数据的子集(即仅训练数据)进行标准化?

    • Jason Brownlee 2020年5月13日上午6:36 #

      不客气。

      它在训练集上进行拟合,然后应用于训练集和测试集。我们这样做是为了避免数据泄漏。

      • Milind Dalvi 2020年9月14日下午3:00 #

        Jason,当你说在训练集上拟合并在相同和测试数据集上进行转换时,我们难道不会在训练集本身中引入泄漏吗?

        我的意思是,假设数据集是按时间排序的,那么训练集中的第一个值现在根据同一集合中未来值派生的统计数据进行了修改。

        那么训练集内部的泄漏是否可以接受,因为我们的模型在处理带时间戳的观测数据时将其视为一个整体?

        • Jason Brownlee 2020年9月15日上午5:19 #

          在监督学习中,我们假设观测值是平稳/独立同分布的,即没有“时间”对观测值的影响。

          如果存在,那么必须像你所说的那样解决,或者必须消除影响,使数据变得平稳。

  60. ABHISHEK GUPTA 2020年6月19日下午12:21 #

    那么我们也需要对测试数据进行归一化/标准化吗?
    也就是说,我们已经对训练数据进行了特征缩放,但是我们的测试数据是逐个样本地传入的,所以我们不能在每个时间点都应用特征缩放!
    请提供一些有价值的反馈。

    • Jason Brownlee 2020年6月19日下午1:15 #

      测试数据应使用与训练数据相同的方法进行准备。

  61. Mritula Chandrasekaran 2020年7月2日上午4:44 #

    我们可以使用直方图分箱法对时间序列数据进行归一化吗?

  62. izzat 2020年7月17日上午12:22 #

    你好,杰森,

    我有一个数据集,其中包含不同日期的相同时间序列“传感器读数”,我想建立一个深度学习模型来预测这些值,所以我所做的是将数据按日期分割成时间序列数据,然后分别进行归一化(min-max)(读数具有不同的范围,例如第一天的最大值为100,但第二天的最大值为48),但我真的很困惑,我需要使用所有日期的最大值/最小值进行归一化,还是我所做的就是正确的?“当我用单独归一化的时间序列训练我的模型时,它比一起归一化时得到了更好的结果。”

    • Jason Brownlee 2020年7月17日上午6:18 #

      对于时间序列,您需要对训练集进行拟合变换并将其应用于新数据。

      使用和不使用变换进行测试,并使用效果最好的方法。

  63. Rubi Kambo 2020年12月1日下午7:15 #

    先生,在我的研究工作中,我最初使用神经网络预测蔬菜价格,所以我必须在训练前对我的价格数据进行缩放吗?第二个疑问是,对于MLP之类的神经网络,应该使用哪种预处理技术。请尽快给我建议。

    • Jason Brownlee 2020年12月2日上午7:41 #

      在建模之前对数据进行缩放是一个好主意。

      尝试一系列不同的数据准备方法以发现最适合您的数据集的方法也是一个好主意。

  64. Fatima 2020年12月28日上午3:21 #

    嗨,Jason,
    我想应用深度神经网络和LSTM。在数据准备阶段,我有一些属性包含药物总数,例如胃肠道药物包含胃肠道药物的总数(此属性的值为0,1,2),数据集中的另一个属性,例如心血管药物包含值(0,1,2,3,4,5,6,7,8,9,10),另一个属性耳鼻咽喉药物包含0,1,这意味着患者没有用药或只用了一种药。
    我的问题是,我可以在这些属性中应用数据归一化吗?
    <>

    包含0,1的属性我肯定不会应用归一化。但是包含0,1,2值的属性,或者我之前提到的例子,我需要应用归一化吗?

    谢谢!!

    • Jason Brownlee 2020年12月28日上午6:01 #

      是的,归一化听起来是个不错的尝试。

      比较使用和不使用数据准备的模型性能,并采用能带来最佳性能的方法。

      • Fatima 2020年12月28日下午11:35 #

        好的,我会的,非常感谢。

  65. Vivian 2021年1月23日下午10:46 #

    我有一个人口数据集,其中有些属性的最小值和最大值未知,我想对数据集进行归一化。我面临一个问题,即数据集随着时间不断增长,添加新数据会影响均值,从而导致某些情况下值超出范围(0到1)。有没有一种技术可以在不重新归一化旧值的情况下对新数据进行归一化,并且仍然将范围保持在0到1之间?

    • Jason Brownlee 2021年1月24日上午6:00 #

      或许可以猜测合理的最小值和最大值?

      或许可以使用标准化代替,并从样本中估计均值和标准差?

  66. Rim SLEIMI 2021年2月19日下午10:20 #

    嘿,谢谢你的解释。我想知道,一般来说,归一化总是对训练MLP有帮助吗?这种归一化可能对监督学习问题造成什么潜在危险?是否有某些维度因为某种原因不适合归一化?如果归一化成为NN中的一个特征,会有什么影响?如果随机初始化的权重比归一化后的数字大很多呢?
    学习问题?是否有某些维度因为某种原因不适合归一化?如果归一化成为神经网络中的一个特征,会有什么影响?如果随机初始化的权重比归一化后的数字大很多呢?

  67. Jovi 2021年3月10日下午4:19 #

    如果时间序列已经通过对数变换使其平稳,那么对其进行归一化/标准化是否明智?

    • Jason Brownlee 2021年3月11日上午5:08 #

      这取决于数据和模式,但通常这是一个好主意。

  68. 亚当 (Adam) 2021年3月13日 下午12:05 #

    你好,贾森 –
    我们如何缩放日期时间列?例如,我有一个包含日期的列……我需要在训练之前对其进行缩放吗?对于日期时间列,您推荐哪种方法?

  69. 伯特兰 (Bertrand) 2021年3月19日 上午2:37 #

    感谢这个教程,标准化/归一化的输出似乎只是温度列,没有日期时间列。如果我想要将日期时间列附加到标准化/归一化温度列的输出,该怎么办?

    我的意思是,我希望输出是一个包含日期时间列的序列,但温度列是经过标准化的。
    这可能吗?如果可能,我该怎么做?

    • 贾森·布朗利 (Jason Brownlee) 2021年3月19日 上午6:25 #

      是的,您需要将日期/时间列存储在另一个变量中,然后缩放温度,再重建数据框。

      或者使用 ColumnTransformer 类选择性地转换一列。

  70. 纳维恩 (Naveen) 2021年6月2日 下午3:51 #

    非常感谢这个有用的教程。假设我有一个人体运动数据集,其中许多受试者执行了多次重复的运动。现在,每个受试者的 CSV 文件都有不同长度的时间戳(即每个文件中的行数不同,列数相同)。有没有什么方法可以使每个运动的时间戳相等以进行模型训练?

    • 贾森·布朗利 (Jason Brownlee) 2021年6月3日 上午5:30 #

      如果您使用的是像 LSTM 这样的高级模型,可以将所有序列用零填充到相同的长度,并使用掩码层跳过零填充的值。

  71. 弗雷迪 (Freddie) 2021年8月10日 下午9:30 #

    嗨,Jason,

    感谢您的文章,它们总是非常有帮助。

    当每个时间序列样本具有不同的均值和方差时,您对归一化/标准化有什么建议?例如,假设您正在开发一个模型来分类/预测时间序列,其中每个样本(输入时间序列)都相关,但由于外部因素而具有不同的均值和方差。将所有训练点组合在一起并取均值和标准差将毫无意义。您可以按样本进行归一化/标准化(即,对于每个样本时间序列,无论是训练输入还是实际输入,在将其输入模型之前,根据其自身统计数据对其进行平移和缩放),但这些“归一化/标准化”值可能无法很好地映射到其他样本,并且模型(在我的情况下是神经网络)可能无法很好地解释数据。

    • Adrian Tam
      阿德里安·谭 (Adrian Tam) 2021年8月11日 上午6:49 #

      您可以尝试幂变换,因为方差正在改变。如果均值正在改变,则取差值。

  72. 艾萨 (Asa) 2021年9月16日 上午12:36 #

    嗨,Jason,

    感谢您的描述。

    数据是时间序列,这意味着时间很重要。因此,在您的指南中,数据归一化后我们只有归一化值,没有时间列。如果我们在归一化后想要对数据进行聚类,我们需要时间列。

    我们如何在保留时间的同时对数据进行归一化。

    谢谢

    • Adrian Tam
      阿德里安·谭 (Adrian Tam) 2021年9月16日 上午1:15 #

      您可以随时将时间列保存在另一个数组中,然后将其与归一化数据结合起来。

  73. 尤格什 (Yogesh) 2021年9月28日 下午8:40 #

    谢谢您的教程。
    对于时间序列数据,如何避免前瞻偏差?

    谢谢

    • Adrian Tam
      阿德里安·谭 (Adrian Tam) 2021年9月29日 下午11:56 #

      只需将“未来”数据对模型不可见即可。例如,如果我们在时间 0 到时间 T 的数据上训练模型,那么在时间 T+k 的任何数据都不应该被提供。在下一轮中,如果我们在另一个时间窗口上训练,我们必须确保模型的内存(例如,在 LSTM 的情况下)被清除。您绝不应该在一个时间窗口上训练,但使用重叠的窗口计算测试分数。

  74. 尤格什 (Yogesh) 2021年10月3日 下午6:44 #

    那么为了在时间 T 对数据进行归一化,我们只使用从时间 0 到时间 T 的数据,对吗?

    • Adrian Tam
      阿德里安·谭 (Adrian Tam) 2021年10月6日 上午7:58 #

      是的,你说得对。

  75. 爱德华·赫尔墨斯·安肖 (Eduard Hermes Anschau) 2022年1月4日 上午6:48 #

    你好,Jason。

    同时使用归一化和标准化可以吗?关于这两种转换技术的结合有什么研究吗?

  76. 帕迪 (Paddy) 2022年4月15日 下午5:54 #

    嗨,Jason,

    当每个时间点的时间间隔长度不同时,如何进行归一化。

    例如
    时间点1 – 第3天 – x1
    时间点2 – 第6天 – x2
    时间点3 – 第10天 – x3
    时间点4 – 第13天 – x4
    时间点5 – 第21天 – x5
    时间点6 – 第24天 – x6
    时间点7 – 第31天 – x7
    时间点8 – 第38天 – x8
    时间点9 – 第45天 – x9
    时间点10 – 第52天 – x10
    时间点11 – 第59天 – x11

    谢谢,
    帕迪

    • 詹姆斯·卡迈克尔 (James Carmichael) 2022年4月16日 上午8:47 #

      你好,帕迪……有些时间序列数据是不连续的。

      这意味着观测值之间的时间间隔不一致,可能会有所不同。

      您可以在这篇文章中了解更多关于连续与不连续时间序列数据集的信息

      时间序列预测问题分类
      处理这种形式数据的方法有很多,您必须找到适合或最适合您的特定数据集和所选方法的方法。

      最常见的方法是将不连续时间序列视为连续的,并将新观测时间点的观测值视为缺失(例如,具有缺失值的连续时间序列)。

      您可能想要探索的一些想法包括

      忽略问题的非连续性并按原样建模数据。
      重采样数据(例如上采样)以使观测值之间具有一致的间隔。
      插补观测值以形成一致的时间间隔。
      填充观测值以形成一致的间隔,并使用遮罩层忽略填充值。

  77. 简 (Jan) 2022年4月25日 下午6:20 #

    嗨,Jason,

    ARIMAX 模型中的外生变量在使用前需要标准化吗?我的变量尺度差异很大(有 GDP,也有一些范围从 0 到 1 的指数)。

    谢谢,

  78. 穆里洛 (Murilo) 2022年8月24日 下午11:37 #

    假设我用前 8 年的数据进行训练,用后 2 年的数据测试我的模型。我应该在进行训练/测试拆分之前进行归一化吗?还是在拆分之后进行归一化?如果归一化在拆分之后进行,我是否需要使用两个不同的缩放器,一个用于训练部分,一个用于测试部分?

    scaler_train = MinMaxScaler()
    scaler_test = MinMaxScaler()
    x_train_scaled = scaler_train.fit_transform(x_train)
    x_test_scaled = scaler_test.fit_transform(x_test)

  79. 萨多恩 (Saadoon) 2022年11月23日 下午7:38 #

    我明白如果有多元数据,那么我们可以采用归一化/标准化技术,因为我们希望不同的变量在定义的范围内,这听起来很合乎逻辑。但在这个例子中,我们只有一个变量,我的问题是,我们真的需要对它进行归一化/标准化吗?我不太确定能否从逻辑上理解/接受这些用于单变量数据的技术。

  80. 杜杜 (Dudu) 2023年2月8日 下午9:03 #

    当我尝试运行程序时,它返回一个错误

    ValueError 回溯 (最近一次调用)
    输入 [39] 中,在 ()
    1 # 准备归一化数据
    2 values = series.values
    —-> 3 values = values.reshape((len(values), 1))
    4 # 训练归一化
    5 scaler = MinMaxScaler(feature_range=(0, 1))

    ValueError: 无法将大小为 7300 的数组重塑为形状 (3650,1)

发表回复

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