我正在播放关于递归神经网络的一些演示。
我注意到每列中我的数据比例差异很大。所以我在考虑将数据批量输入我的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
我的问题是,正在预处理数据,比如我的情况下必须使用标准的StandardScaler吗?为什么?
(欢迎您编辑我的问题)
答案 0 :(得分:9)
规范化您的训练数据将是有益的。具有不同功能的不同功能将输入到您的模型中将导致网络对功能进行不均衡的加权。这可能导致某些特征错误地优先于表示中的其他特征。
尽管有关数据预处理的整个讨论对于何时需要以及如何正确地标准化每个给定模型和应用程序域的数据存在争议,但机器学习中存在一个普遍的共识,即运行平均减法以及一般的规范化预处理步骤很有帮助。
在平均减法的情况下,从数据中减去每个单独特征的平均值,可以将其解释为从几何角度围绕原点居中数据。每个维度都是如此。
在平均减法步骤之后归一化数据导致数据维度的归一化到大致相同的比例。请注意,如上所述,在此步骤之后,不同的功能将失去彼此之间的任何优先级。如果您有充分的理由认为功能中的不同比例具有网络可能需要真正了解数据集中的基础模式的重要信息,那么规范化将是有害的。标准方法是将输入缩放为均值为0 和方差为1 。
进一步的预处理操作可能对特定情况有帮助,例如对您的数据执行 PCA 或美白。查看CS231n (Setting up the data and the model)的精彩笔记,以便进一步参考这些主题,以及更详细地阐述上述主题。
答案 1 :(得分:1)
我找到了https://arxiv.org/abs/1510.01378 如果你进行标准化,它可以提高收敛性,从而缩短训练时间。
答案 2 :(得分:1)
绝对是的。大多数神经网络最适用于0-1或-1到1的数据(取决于输出函数)。此外,当某些输入更高时,其他网络将“认为”它们更重要。这可以使学习时间很长。网络必须首先降低此输入中的权重。