数值数据:标准化

通过统计和可视化技术检查数据后,您应以有助于模型更有效地训练的方式转换数据。归一化的目标是将特征转换为相似的比例。例如,请考虑以下两项功能:

  • 特征 X 的范围为 154 到 24,917,482。
  • 特征 Y 的范围为 5 到 22。

这两个特征的范围差异很大。归一化可能会处理 XY,使它们跨越相似的范围(可能为 0 到 1)。

归一化具有以下优势:

  • 有助于模型在训练期间更快地收敛。当不同特征的范围不同时,梯度下降可能会“反弹”,从而减慢收敛速度。不过,AdagradAdam 等更高级的优化器会随时间改变有效学习速率,从而避免此问题。
  • 有助于模型做出更准确的推理预测。 如果不同特征的范围不同,生成的模型可能会做出不太有用的预测。
  • 有助于在特征值非常高时避免“NaN 陷阱”NaN非数字的缩写。当模型中的某个值超出浮点精确率限制时,系统会将该值设置为 NaN 而不是某个数字。当模型中的一个数值变成 NaN 时,模型中的其他数值最终也会变成 NaN。
  • 帮助模型为每个特征确定合适的权重。如果不进行特征缩放,模型会过于关注范围较大的特征,而对范围较小的特征关注不足。

我们建议对涵盖明显不同范围的数值特征(例如年龄和收入)进行归一化处理。我们还建议对涵盖广泛范围的单个数值特征(例如 city population.)进行归一化处理

请考虑以下两项功能:

  • 特征 A 的最低值为 -0.5,最高值为 +0.5。
  • 特征 B 的最低值为 -5.0,最高值为 +5.0。

特征 A 和特征 B 的跨度相对较窄。不过,功能 B 的跨度是功能 A 的 10 倍。因此:

  • 在训练开始时,模型会假设特征 B 比特征 A“重要”十倍。
  • 训练时间会比预期长。
  • 生成的模型可能不是最佳模型。

不进行归一化处理造成的总体损害相对较小;不过,我们仍然建议将特征 A 和特征 B 归一化到相同的范围,例如 -1.0 到 +1.0。

现在,我们来考虑两个范围差异更大的特征:

  • 特征 C 的最低值为 -1,最高值为 +1。
  • 功能 D 的最低值为 +5000,最高值为 +1,000,000,000。

如果不对特征 C 和特征 D 进行归一化处理,模型很可能无法达到最佳效果。此外,训练将需要更长时间才能收敛,甚至可能完全无法收敛!

本部分介绍了三种常用的归一化方法:

  • 线性缩放
  • Z 分数缩放
  • 对数缩放

本部分还将介绍剪辑。虽然剪裁不是真正的归一化技术,但它确实可以将不规则的数值特征限制在可生成更好模型的范围内。

线性缩放

线性缩放(通常简称为缩放)是指将浮点值从其自然范围转换为标准范围(通常为 0 到 1 或 -1 到 +1)。

如果满足以下所有条件,线性缩放是不错的选择:

  • 数据的下限和上限不会随时间发生太大变化。
  • 特征包含的离群值很少或没有,并且这些离群值并不极端。
  • 该特征在其范围内大致呈均匀分布。 也就是说,直方图会显示大致均匀的条形,对应于大多数值。

假设人类 age 是一项功能。线性缩放是 age 的一种很好的归一化技术,原因如下:

  • 近似下限和上限为 0 到 100。
  • age 包含的离群值百分比较低。只有约 0.3% 的人口超过 100 岁。
  • 虽然某些年龄段的代表性可能略好于其他年龄段,但大型数据集应包含所有年龄段的充足示例。

练习:检查您的理解情况

假设您的模型有一个名为 net_worth 的特征,用于保存不同人员的净资产。线性缩放是否适合作为 net_worth 的一种归一化技术?请说明原因。

Z 分数缩放

Z 得分是指某个值与平均值相差的标准差数。 例如,比平均值 2 个标准差的值的 Z 得分为 +2.0。比平均值 1.5 个标准差的值的 Z 得分为 -1.5。

使用 Z 得分缩放表示特征意味着将该特征的 Z 得分存储在特征向量中。例如,下图显示了两个直方图:

  • 左侧为经典正态分布。
  • 右侧是经过 Z-score 缩放归一化的同一分布。
图 4. 两个直方图:均显示相同的正态分布。第一个直方图包含原始数据,平均值为 200,标准差为 30。第二个直方图包含第一个分布的 Z 得分版本,其平均值为 0,标准差为 1。
图 4. 正态分布的原始数据(左)与 Z 得分(右)。

对于下图所示的仅具有模糊正态分布的数据,Z 得分缩放也是一个不错的选择。

图 5. 两个形状相同的直方图,每个直方图都显示了从陡峭上升到平台,然后相对快速下降,最后逐渐衰减的过程。一个直方图显示了原始数据的分布情况;另一个直方图显示了通过 Z 得分缩放进行归一化后的原始数据分布情况。
            两个直方图的 X 轴上的值差异很大。
            原始数据直方图的范围为 0 到 29,000,而 Z 得分缩放直方图的范围为 -1 到大约 +4.8
图 5. 非经典正态分布的原始数据(左)与 Z 得分缩放(右)。

如果数据遵循正态分布或某种程度上类似于正态分布,则 Z 得分是一个不错的选择。

请注意,某些分布可能在其大部分范围内都是正态分布,但仍包含极值离群点。例如,net_worth 特征中的几乎所有点都可能恰好位于 3 个标准差范围内,但此特征的少数几个示例可能与平均值相差数百个标准差。在这种情况下,您可以将 Z 得分缩放与其他形式的归一化(通常是剪裁)相结合来处理这种情况。

练习:检查您的理解情况

假设您的模型基于名为 height 的特征进行训练,该特征包含 1,000 万名女性的成人身高。Z-score 缩放是否适合作为 height 的归一化技术?请说明原因。

对数缩放

对数缩放会计算原始值的对数。从理论上讲,对数可以是任意底数;但在实践中,对数缩放通常会计算自然对数 (ln)。

当数据符合幂律分布时,对数缩放很有用。通俗地说,幂律分布如下所示:

  • X 的值较低时,Y 的值非常高。
  • 随着 X 值的增加,Y 值会快速减小。 因此,X 的值较高时,Y 的值会非常低。

电影评分是幂律分布的一个很好的例子。在下图中,请注意:

  • 有些电影有很多用户评分。(X 的值较低时,Y 的值较高。)
  • 大多数电影的用户评分都很少。(X 的值较高时,Y 的值较低。)

对数缩放会改变分布,有助于训练出能够做出更好预测的模型。

图 6. 两张图表,分别比较原始数据与原始数据的对数。
            原始数据图显示,头部有大量用户评分,后面跟着长尾。对数图的分布更均匀。
图 6. 将原始分布与其对数进行比较。

再举一个例子,图书销售额符合幂律分布,因为:

  • 大多数已出版的图书的销量都非常低,可能只有一两百本。
  • 有些书的销量适中,达到数千册。
  • 只有少数畅销书的销量会超过 100 万册。

假设您正在训练一个线性模型,以找出图书封面与图书销量之间的关系。如果线性模型基于原始值进行训练,则必须找到畅销百万册的图书封面与仅售出 100 册的图书封面之间相差 10,000 倍的某种特征。 不过,对所有销售数据进行对数缩放可使任务的可行性大大提高。 例如,100 的对数是:

  ~4.6 = ln(100)

而 1,000,000 的对数是:

  ~13.8 = ln(1,000,000)

因此,1,000,000 的对数仅比 100 的对数大三倍左右。 您可能可以想象,畅销书的封面在某些方面比销量很低的图书封面强大三倍左右。

裁剪

裁剪是一种可最大限度减少极端离群值影响的技术。简而言之,剪裁通常会将离群值限制(减少)为特定的最大值。剪辑是一个奇怪的想法,但它可能非常有效。

例如,假设有一个数据集包含一个名为 roomsPerPerson 的特征,该特征表示各种房屋的房间数(总房间数除以居住人数)。下图显示,超过 99% 的特征值符合正态分布(大致来说,平均值为 1.8,标准差为 0.7)。不过,该特征包含一些离群值,其中一些是极值:

图 7. roomsPerPerson 曲线图,其中几乎所有值都聚集在 0 到 4 之间,但是有一个非常长的尾巴一直延伸到每人 17 个房间
图 7. 主要正常,但并非完全正常。

如何最大限度地减少这些极端离群值的影响?直方图不是均匀分布、正态分布或幂律分布。如果我们只是简单地将 roomsPerPerson 的最大值“限制”或“削减”为某个任意值(比如 4.0),会发生什么情况呢?

roomsPerPerson 曲线图,其中所有值均在 0 到 4.0 之间。曲线图是钟形的,但在 4.0 处有个异常的小峰值
图 8. 将特征值剪裁为 4.0。

将特征值剪裁为 4.0 并不意味着模型会忽略所有大于 4.0 的值。而是指所有大于 4.0 的值现在都变为 4.0。这解释了 4.0 处的特殊山丘。尽管存在这个山峰,但缩放后的特征集现在比原始数据更有用。

等一下!您真的可以将每个离群值都减少到某个任意上限吗?在训练模型时,是的。

您还可以在应用其他形式的归一化后剪裁值。例如,假设您使用 Z 得分缩放,但少数离群点的绝对值远大于 3。在这种情况下,您可以:

  • 将大于 3 的 Z 分数裁剪到正好 3。
  • 将 Z 得分小于 -3 的值裁剪为正好 -3。

剪裁可防止模型过度关注不重要的数据。不过,有些离群值实际上很重要,因此请谨慎剪裁值。

归一化技术摘要

归一化技术公式适用情形
线性缩放 $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ 当特征在整个范围内大致均匀分布时。 扁平状
Z 分数缩放 $$ x' = \frac{x - μ}{σ}$$ 当特征呈正态分布时(峰值接近平均值)。 钟形
对数缩放 $$ x' = log(x)$$ 当特征分布在至少一侧的尾部严重偏斜时。 重尾形
裁剪 如果 $x > max$,则设置 $x' = max$
如果 $x < min$,则设置 $x' = min$
当特征包含极端离群值时。

练习:知识测验

哪种技术最适合用于对具有以下分布的特征进行归一化处理?

一个直方图,显示了值介于 0 到 20 万之间的数据聚类。对于 0 到 10 万的范围,数据点数量逐渐增加;对于 10 万到 20 万的范围,数据点数量逐渐减少。

Z 分数缩放
数据点通常符合正态分布,因此 Z 得分缩放会将它们强制缩放到 -3 到 +3 的范围内。
线性缩放
查看本页面上有关归一化技术的讨论,然后重试。
对数缩放
查看本页面上有关归一化技术的讨论,然后重试。
裁剪
查看本页面上有关归一化技术的讨论,然后重试。

假设您正在开发一个模型,该模型可根据数据中心内部测得的温度预测数据中心的生产力。 数据集中的几乎所有 temperature 值都介于 15 到 30(摄氏度)之间,但以下情况除外:

  • 在一年中,极热的天气会出现一到两次,此时 temperature 中会记录一些介于 31 到 45 之间的值。
  • temperature 中每第 1,000 个点都设置为 1,000,而不是实际温度。

哪种归一化技术适合用于 temperature

剪裁介于 31 到 45 之间的离群值,但删除值为 1,000 的离群值

1,000 的值是错误的,应删除而不是剪裁。

31 到 45 之间的值是合法的数据点。 假设数据集在此温度范围内没有足够的示例来训练模型以做出良好的预测,那么对这些值进行剪裁可能是一个好主意。不过,在推理期间,请注意,剪裁后的模型对 45 度和 35 度的温度做出的预测是相同的。

剪掉所有离群点
查看本页面上有关归一化技术的讨论,然后重试。
删除所有离群值
查看本页面上有关归一化技术的讨论,然后重试。
删除介于 31 到 45 之间的离群值,但将值为 1,000 的离群值剪裁掉。
查看本页面上有关归一化技术的讨论,然后重试。