【问题标题】:Should I normalize my features before throwing them into RNN?我应该在将特征投入 RNN 之前对其进行归一化吗?
【发布时间】:2017-09-14 00:32:33
【问题描述】:

我正在播放一些关于循环神经网络的演示。

我注意到我在每一列中的数据规模差异很大。因此,我正在考虑在将数据批次放入我的 RNN 之前做一些预处理工作。关闭的列是我未来要预测的目标。

     open   high    low     volume  price_change  p_change     ma5    ma10  \
0  20.64  20.64  20.37  163623.62         -0.08     -0.39  20.772  20.721
1  20.92  20.92  20.60  218505.95         -0.30     -1.43  20.780  20.718
2  21.00  21.15  20.72  269101.41         -0.08     -0.38  20.812  20.755
3  20.70  21.57  20.70  645855.38          0.32      1.55  20.782  20.788
4  20.60  20.70  20.20  458860.16          0.10      0.48  20.694  20.806

     ma20      v_ma5     v_ma10     v_ma20  close
0  20.954  351189.30  388345.91  394078.37  20.56
1  20.990  373384.46  403747.59  411728.38  20.64
2  21.022  392464.55  405000.55  426124.42  20.94
3  21.054  445386.85  403945.59  473166.37  21.02
4  21.038  486615.13  378825.52  461835.35  20.70

我的问题是,在我的情况下是否需要使用 sklearn 中的 StandardScaler 预处理数据?为什么?

(欢迎您编辑我的问题)

【问题讨论】:

  • 总是有必要对输入和输出数据进行规范化,这样可以提高收敛性,不这样做可能会导致学习失败。
  • @MatiasValdenegro 我应该对 X_train 和 y_train 都进行归一化吗?
  • 是的,这些是你的输入和输出数据吧?
  • @MatiasValdenegro 是的。我有一个包含所有数据(问题描述)的大 DataFrame,经过一些处理,我将其分为 X_train、y_train、X_test、y_test。我应该在拆分它们之前还是之后执行标准化?

标签: machine-learning neural-network deep-learning recurrent-neural-network


【解决方案1】:

标准化您的训练数据将是有益的。为模型提供具有不同尺度的不同特征将导致网络对特征的权重不均等。这可能会导致在表示中某些特征优先于其他特征的错误优先级。

尽管关于数据预处理的整个讨论都存在争议,无论是在何时需要以及如何正确规范每个给定模型和应用领域的数据,但机器学习中的普遍共识是运行均值减法 以及一般的标准化预处理步骤很有帮助。

均值减法的情况下,从数据中减去每个单独特征的均值,这可以解释为从几何角度来看,数据以原点为中心。对于每个维度都是如此。

归一化平均减法步骤后的数据会导致数据维度归一化到大致相同的比例。请注意,如上所述,在此步骤之后,不同的功能将失去任何优先级。如果您有充分的理由认为特征中的不同尺度包含重要信息,网络可能需要这些信息才能真正理解数据集中的底层模式,那么规范化将是有害的。标准方法是将输入缩放为具有 均值为 0方差为 1

进一步的预处理操作在特定情况下可能会有所帮助,例如对您的数据执行 PCAWhitening。查看CS231n (Setting up the data and the model) 的精彩注释,以获取有关这些主题的进一步参考以及上述主题的更详细说明。

【讨论】:

    【解决方案2】:

    绝对是的。大多数神经网络在数据 beetwen 0-1 或 -1 到 1 时效果最好(取决于输出函数)。此外,当某些输入更高时,其他网络会“认为”它们更重要。这会使学习时间变得很长。网络必须首先降低此输入中的权重。

    【讨论】:

      【解决方案3】:

      我找到了这个https://arxiv.org/abs/1510.01378 如果您对其进行归一化,它可能会提高收敛性,因此您将获得更少的训练时间。

      【讨论】:

      • 谢谢,我去看看。我尝试使用列 [open high low](它们的规模相似)作为我的特征并训练 RNN,结果看起来还不错。但是许多其他技术需要规范化,这就是我在这里问的原因。 :DD ty
      猜你喜欢
      • 2022-06-13
      • 1970-01-01
      • 2015-11-27
      • 2020-07-25
      • 2013-08-25
      • 2019-01-18
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      相关资源
      最近更新 更多