神经网络中的数据标准化和标准化


40

我正在尝试使用神经网络(ANN)预测复杂系统的结果。结果(相关)值的范围在0到10,000之间。不同的输入变量具有不同的范围。所有变量都具有大致正态分布。

我考虑在训练之前缩放数据的其他选项。一种选择是通过使用每个变量的均值和标准偏差值独立地计算累积分布函数,将输入(独立)变量和输出(独立)变量缩放为[0,1] 。这种方法的问题在于,如果我在输出端使用S形激活函数,则极有可能会错过极端数据,尤其是那些在训练集中看不到的数据

另一种选择是使用z得分。在那种情况下,我没有极端的数据问题。但是,我仅限于输出的线性激活函数。

ANN还在使用哪些其他公认的规范化技术?我试图寻找有关此主题的评论,但未找到任何有用的信息。


有时会使用Z分数归一化,但我有一种有趣的感觉,它可能是拜耳答案的另一个名字??
osknows'Mar

除增白部分外,其他均相同。
bayerj 2011年

1
如果您预测的是值(按原样)而不是概率(即回归而不是分类),则应始终使用线性输出函数。
seanv507

迈克尔·杰勒(Michael Jahrer)提出的Rank-Gauss。然后是等级,然后使其变为高斯。
user3226167

Answers:


32

一种标准方法是将输入缩放为均值0和方差1。线性去相关/白化/ pca也很有帮助。

如果您对交易技巧感兴趣,我可以推荐LeCun的高效反向支撑纸。


1
当然,如果数据不遵循(单一)正态分布,则永远不要试图盲目地标准化数据。stats.stackexchange.com/a/816/4581
user4581 2012年

24
使用神经网络,您必须这样做。否则,您将立即使隐藏的单元饱和,然后它们的梯度将接近零,并且将无法学习。这与建模无关(神经网络不假定输入数据有任何分布),而是与数字问题有关。
bayerj 2012年

我很困惑。此链接(machinelearningmastery.com/…)表示,当您使用的算法确实对数据具有高斯分布进行假设时(而不是NN),“标准化”非常有用。否则,它表明您应该使用标准化。有人可以启发我吗?
ihebiheb

21

1-最小-最大归一化将保留分数的原始分布,而不是缩放因子,并将所有分数转换为公共范围[0,1]。但是,此方法不可靠(即,该方法对异常值高度敏感。

2-标准化(Z分数标准化)最常用的技术,使用给定数据的算术平均值和标准偏差计算得出。但是,均值和标准差均对离群值敏感,因此该技术不能保证归一化分数的通用数值范围。此外,如果输入分数不是高斯分布,则此技术不会在输出处保留输入分布。

3-中位数和MAD:中位数和中位数绝对偏差(MAD)对异常值和分布的极端尾部中的点不敏感。因此它很健壮。但是,此技术不会保留输入分布,也不会将分数转换为通用的数值范围。

4- tanh估计量:Hampel等人介绍的tanh估计量。强大而高效。归一化由

tanh估计量 其中,μGH和σGH分别是由Hampel估计器给出的真实分数分布的均值和标准差估计。

因此,我建议使用tanh估计器。

参考 https://www.cs.ccu.edu.tw/~wylin/BA/Fusion_of_Biometrics_II.ppt


我很难找到有关该tanh估计量的信息。谁能对此有所启发?
Ben Ogorek

最终找到了一篇描述正切tanh估计器的很好的论文:wjscheirer.com/papers/wjs_eccv2010_fusion.pdf。作为通用标准化选项,它们听起来不可行。“ [Tanh估算器]与自适应z得分相比,计算起来要复杂得多...必须以临时方式定义分布中位数的三个不同区间的尾点。这些参数可能很难确定实验,如果选择不当,则会限制tanh估计量的有效性。”
Ben Ogorek

8

在这里,我给出了类似的答案在进行多元回归时,何时应将预测变量居中以及何时应对其进行标准化?但认为背景完全不同,可以在这里找到答案。

有用的Usenet资源非常丰富,网址为http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-16.html

当人们想要对数据进行标准化/标准化/重新缩放时,它简单地给出了一些问题和考虑因素。因为它从机器学习的角度处理主题,并且您的问题是ML,所以它可能具有一定的相关性。


您应该在此处写下每个链接的要点,因此不需要其他“导航”
leoschet

2

你可以做

  • 最小-最大归一化(将输入/目标归一化为[-1,1]范围),或
  • 均值标准差归一化(将输入/目标均值归零,均方差/标准差归零)

1

如果你是在工作pythonsklearn这样做的方法他们在使用不同的技术preprocessing模块(加上一个漂亮的管道功能,在他们的文档为例):

import sklearn

# Normalize X, shape (n_samples, n_features)
X_norm = sklearn.preprocessing.normalize(X)

0

好吧,[0,1]是标准方法。对于神经网络,在0-1范围内效果最佳。最小-最大缩放(或归一化)是遵循的方法。

现在,在异常值上,在大多数情况下,我们必须对它们进行裁剪,因为异常值并不常见,因此您不希望异常值影响模型(除非异常检测是您要解决的问题)。您可以根据68-95-99.7的经验法则来裁剪它,或绘制箱形图,观察并相应地裁剪它。

MinMax公式- (xi - min(x)) / (max(x) - min(x)) 或可以使用sklearn.preprocessing.MinMaxScaler


-1

“已接受”是最适合您的内容-然后您接受它。

以我的经验,将分布从Johnson系列分布到每个连续特征都很好,因为分布具有高度的灵活性,可以将大多数单峰特征转换为标准正态分布。它也将有助于多模态特征,但要指出的是,它通常将特征置于尽可能理想的形式(标准的高斯分布数据非常适合使用-与大多数模型兼容,有时对于大多数模型而言都是最佳的)统计/ ML方法可用)。

http://qualityamerica.com/LSS-Knowledge-Center/statisticalinference/johnson_distributions.php

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.