归一化

归一化的目标是将特征转换为相似的大小。这样可以提高模型的性能和训练稳定性。

归一化技术概览

四种常见的归一化技术可能很有用:

  • 扩展到某个范围
  • 剪辑
  • 对数缩放
  • z-score

以下图表显示了每种归一化技术对原始特征(价格)的分布的影响。这些图表基于 1985 年汽车业年鉴的数据集,属于汽车数据集下的 UCI 机器学习存储库的一部分。

五个图表:1. 一个原始分布。2. 将原始分布缩放到与原始分布相同的范围。3. 原始分布经过裁剪,会去掉最大值。4. 原始对数按对数缩放,在分布过程中汇总数据。5. 分布的 z 得分,其形状与原始分布类似。

图 1. 归一化技术的摘要。

缩放到某个范围

MLCC 中提到缩放意味着将浮点特征值从其自然范围(例如 100 至 900)转换为标准范围(100 至 900)。使用以下简单公式可缩放至某个范围:

\[ x' = (x - x_{min}) / (x_{max} - x_{min}) \]

如果同时满足以下两个条件,则根据范围进行扩缩是一个不错的选择:

  • 您知道数据的大致上限和下限,只有很少或没有离群值。
  • 您的数据在该范围内大致均匀分布。

年龄就是一个很好的例子。大多数年龄值介于 0 到 90 之间,范围的每个部分都有大量用户。

相比之下,您不应使用收入扩展,因为只有少数用户会产生非常高的收入。收入的线性比例上限将非常高,并且大多数人将被挤到其中的一部分。

功能裁剪

如果您的数据集包含极端离群值,您可以尝试使用特征裁剪,将高于(或低于)某个特征值的上限设为固定值。例如,您可以将高于 40 的所有温度值裁剪到正好 40。

您可以在其他标准化前后应用特征剪辑。

公式:设置最小值/最大值以避免离群值。

原生分配与上限分发的比较。在原生分布中,几乎所有的值都介于 1 至 4 之间,但有一小部分值介于 5 至 55 之间。在具有上限的分布中,所有最初高于 4 的值现在都具有值 4。

图 2. 比较原始发行版及其裁剪版本。

另一种简单的剪辑策略是按 z-score 将剪辑裁剪至 +-Nğ(例如,限制为 +-3ğ)。请注意,BeyondCorp 是标准差。

日志扩缩

日志缩放功能会计算值的日志,以将宽范围压缩为窄范围。

\[ x' = log(x) \]

当少数值具有许多点时,日志缩放会非常有用,而大多数其他值只有很少的点。这种数据分布称为幂律分布。电影评级是一个很好的例子。在下面的图表中,大多数电影的评分(尾部的数据)非常少,而有些影片的评分(头部数据)非常多。日志缩放会改变分布,帮助改善线性模型性能。

比较原始数据与原始数据日志的两个图表。原始数据图在头中显示许多评分,后跟一个长尾。日志图表分布更均匀。

图 3.将原始发行版与其日志进行比较。

Z 评分

Z 评分是缩放的变体,表示与平均值相差的标准差数。您应使用 z-score 来确保特征分布的平均值 = 0 且 std = 1。存在一些离群值,但不至于需要裁剪时,该值非常有用。

x 的 Z 分数计算公式如下:

\[ x' = (x - μ) / σ \]

两张原始数据与用 z-score 标准化的数据进行比较。原始数据显示大概 5000 至 45000 的泊松分布。标准化数据的范围为 -1 至 +4。

图 4.将原始分布与其 z-score 分布进行比较。

请注意,Z-score 将范围约为 40000 的原始值压缩到大约 -1 到 +4 之间。

假设您不确定离群值是否真的极端。 在这种情况下,应从 z-score 开始,除非您有不希望模型学习的特征值;例如,这些值是测量错误或怪异行为的结果。

总结

归一化技术公式适用情形
线性缩放 $$ x' = (x - x_{min}) / (x_{max} - x_{min}) $$ 特征在固定范围内或多或少均匀分布。
夹扣 如果 x > 最大值,则 x' = 最大值;如果 x < 最小值,则 x' = 最小值 当特征包含一些极端离群值时。
日志扩缩 x' = 日志(x) 当该功能符合电源法时。
Z 评分 x' = (x - μ) / BeyondCorp 当特征分布不包含极端离群值时。