了解数据规范化

数据挖掘 数据清理 数据 正常化
2021-10-05 10:48:05

所以我知道,当我们有不同值范围的不同参数时,我们必须标准化这些值。另外,我读到,当一个参数实际上需要更高的值时,我们不应该对其进行规范化。然而,情况不总是如此吗?例如,如果我们有年龄和薪水,薪水不是总是大于年龄吗?标准化这些值不会丢失可能的重要信息吗?

此外,您应该始终规范化整个数据集,还是可以简单地规范化多个特定列?

3个回答

标准化是一个非常模糊的概念。大多数时候,它被误解了。我将以神经网络的具体案例为例进行说明:

  • 目的:进行归一化,以便神经网络权重更快地收敛。在 CNN 和深度神经网络中,这特别有帮助,尤其是在 CNN 中,这有助于防止梯度爆炸/消失。

我遇到的标准化最常见的解释是,如果您有 2 个特征,其中一个的规模比另一个大得多,例如房价和房屋面积,那么规模更大的特征将主导输出。在我看来这是非常不正确的,因为当你通过神经网络进行反向传播时,权重更新与激活成正比,因此更大的激活意味着更大的反馈,因此权重会更快地减小并变得更小,直到w1*house price = w2*house area这种关系大致成立。是的,它会导致更多的振荡(直觉上是因为学习率也会乘以更大的规模),但它最终可能会收敛。

因此,使用归一化的最佳 3 个原因是:

  • 如果特征的规模很大,则与该特征相关的权重将具有更大的振荡,从而导致收敛速度较慢,如果使用深度 NN,则可能没有收敛,而归一化有助于使值变小-1 to 1,因此梯度更新也很小,从而导致更快的收敛.
  • 标准化的最佳直觉可以从斯坦福的这段视频及其后续视频中找到。由于我们知道权重更新与输入成正比,因此它也将始终采用输入的符号(或完全相反的符号)。现在我们知道房价和面积总是正的(至少在我们的宇宙中!)。所以权重更新总是有明确的符号,要么是正的,要么是负的(对于从单个下一层节点传播的错误)。但是权重更新可能在第四象限有一个最佳方向,因此权重更新将遵循之字形模式,这将导致效率损失。
  • 最后,当你处理像 CNN 这样的深度神经网络时,如果你不对像素进行归一化,它将导致指数级大/消失的梯度。由于通常softmax/sigmoid在最后一层使用,它会压缩输出。如果你有一个大的输出,通常是由于未标准化的数据,它会导致精确的 0 或精确的 1 输出,它被输入一个log函数和 BAM!溢出。错误变为infNaN在python中。所以inf误差意味着梯度爆炸,NaN意味着梯度无法计算。因此,您从一开始就没有进行培训,并且inf通常会继续进行NaN这将持续到永恒。这可能可以通过使用更高的浮点精度来解决,但它会导致更高的内存和处理器消耗,最终导致效率低下。

TL;DR:归一化用于更快的权重收敛。非标准化数据面临的问题是更大的权重振荡、非最优方向的权重更新、深度神经网络中的精度溢出。

执行标准化以平衡权重并使参数具有通用性。在您提到的情况下,这是区间标准化(因此是数字,因此是具有标准顺序和距离度量的集合)。只是为了对比,字符串规范化可能涉及词干、转换为大写或许多其他技术,具体取决于上下文。由于缩放(乘以相同的因子)是线性运算,因此它保留了顺序和大小关系以及其他属性。因此,在一般情况下,规范化不会丢失有关参数/维度内关系的信息。

如果我们为了示例而使用简单的聚类算法,请考虑年龄可能具有(大约)(0-100)的范围,而薪水可能类似于区间(1-10^6)。一种天真的方法是不执行归一化并使用默认的欧几里得距离度量。但是,高达 100 美元的工资差异可以忽略不计。因此,您的工资信息将主导您的年龄信息,从而导致数据点(以及集群)之间的距离主要由工资决定。对于聚类而言,年龄的次要作用将变得可以忽略不计。但是,如果我们将两者归一化到 (0-1) 的范围内,我们可能会得到一些可比较的尺度,并且因素影响会非常小(但仍有待考虑)。

由于括号中的最后一句话,大多数先进的机器学习算法(包括神经网络、支持向量机)实际上处理不同的尺度。当您使用这些时,您不需要对数据进行规范化,因为该算法会学习规范化以及数据的其他属性。

何时对数据进行规范化取决于您的问题背景和您计划采取的方法。假设规范化数据使得从第一个视图中更容易判断一个值是低还是高。

matpo 和 DuttaA 都给出了很好的技术答案,所以我将添加一个易于记忆的短语,它涵盖了归一化的大量原因:苹果和橙子。

当您有以不同单位测量的变量时,您应该始终进行标准化,除非有令人信服的理由不这样做。