通过统计和可视化技术检查数据后,您应以有助于模型更高效训练的方式转换数据。归一化的目标是将特征转换为相近的规模。例如,请考虑以下两个地图项:
- 特征
X
的范围介于 154 到 24,917,482 之间。 - 特征
Y
的范围介于 5 到 22 之间。
这两个特征的范围截然不同。归一化可能会操纵 X
和 Y
,使其跨越类似的范围(可能是 0 到 1)。
标准化具有以下优势:
- 帮助模型在训练期间更快收敛。当不同特征具有不同的范围时,梯度下降可能会“反弹”并使收敛速度变慢。尽管如此,Adagrad 和 Adam 等更高级的优化器都会随时间改变有效学习速率来防止出现这种问题。
- 帮助模型推断出更准确的预测结果。 当不同的特征具有不同的范围时,生成的模型可能会做出不太有用的预测。
- 有助于在特征值非常高时避免“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 得分缩放法归一化的相同分布。
对于下图中显示的仅具有模糊正态分布的数据,z 分位数缩放也是一个不错的选择。
如果数据遵循正态分布或类似于正态分布的分布,则 Z 得分是一个不错的选择。
请注意,某些分布在其大部分范围内可能属于正常分布,但仍包含极端离群值。例如,net_worth
特征中的几乎所有点可能完全符合 3 个标准差,但该特征的几个示例可能与平均值相差数百个标准差。在这些情况下,您可以将 Z 分数缩放与另一种归一化形式(通常是剪裁)结合使用来处理此类情况。
练习:检查您的理解情况
假设您的模型使用名为height
的特征进行训练,该特征拥有千万名女性的成人身高。Z 分标准化是否适合 height
?请说明原因。
对数缩放
对数缩放会计算原始值对数。在理论上,对数可以是任何底数;在实践中,对数缩放通常会计算自然对数 (ln)。
当数据符合幂定律分布时,对数缩放非常有用。通俗地说,幂定律的分布情况如下所示:
X
的低值具有非常高的值Y
。- 随着
X
值的增加,Y
值会快速下降。因此,X
值越高,Y
值越低。
电影评分就是幂律分布的绝佳示例。在下图中,请注意以下事项:
- 有些电影有很多用户评分。(
X
的低值表示Y
的高值。) - 大多数电影的用户评分非常少。(
X
值越高,Y
值越低。)
对日志进行缩放会改变分布,这有助于训练出能够做出更准确预测的模型。
再举一个例子,图书销量遵循幂律分布,因为:
- 大多数出版的图书销量都很少,可能只有一两百本。
- 有些图书的销量适中,数以千计。
- 只有少数畅销书的销量会超过 100 万册。
假设您正在训练线性模型,以便找出图书封面与图书销量之间的关系。基于原始值训练的线性模型必须找到与销量达到 100 万册的图书封面有关的某种特征,该特征的效果要比销量仅为 100 册的图书封面强大 10,000 倍。不过,对全部销售数据进行对数调整后,这项任务的可行性会大大增加。 例如,对数 100 为:
~4.6 = ln(100)
而 1,000,000 的日志为:
~13.8 = ln(1,000,000)
因此,1,000,000 的对数仅比 100 的对数大约 3 倍。 您或许可以想象,畅销书封面(在某种程度上)比小卖本的封面大约三倍。
剪裁
剪裁是一种可最大限度地减少极端离群值影响的技术。简而言之,剪裁通常会将离群值的值限制(降低)到特定的最大值。剪裁是一个奇怪的想法,但却非常有效。
例如,假设某个数据集包含名为 roomsPerPerson
的特征,该特征表示不同房屋的房间数(房间总数除以入住人数)。下图显示,超过 99% 的特征值符合正态分布(大致均值为 1.8,标准差为 0.7)。不过,该特征包含一些离群值,其中一些较为极端:
如何最大限度地减少这些极端离群值的影响?直方图不是均匀分布、正态分布或幂定律分布。如果您只是简单地将 roomsPerPerson
的最大值限制或削减为某个任意值(比如 4.0),会发生什么情况呢?
将特征值限制在 4.0 并不意味着您的模型会忽略所有大于 4.0 的值。而是表示所有大于 4.0 的值现在都变为 4.0。这说明了 4.0 处的奇怪山丘。尽管如此,经过缩放的特征集现在比原始数据更有用。
等一下!您真的能将每个离群值都降到某个任意上限吗?在训练模型时,答案是肯定的。
您还可以在应用其他形式的标准化后剪裁值。例如,假设您使用 Z 分数缩放,但一些离群值的绝对值远远大于 3。在这种情况下,您可以:
- 将大于 3 的 Z 得分裁剪为正好 3。
- 将小于 -3 的 Z 得分裁剪为正好 -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$ |
当地图项包含极端离群值时。 |
练习:测试您的知识
假设您正在开发一个模型,该模型可根据数据中心内测量的温度预测数据中心的生产力。
数据集中几乎所有 temperature
值均介于 15 到 30 摄氏度之间,但以下情况除外:
- 每年一两次,在极端炎热的天气下,
temperature
中会记录一些介于 31 到 45 之间的值。 temperature
中的每 1,000 个点都设为 1,000,而不是实际温度。
对于 temperature
,下面哪一项是合理的归一化方法?
值为 1,000 是错误,应删除而不是截断。
介于 31 到 45 之间的值是合法的数据点。 对于这些值,最好进行剪裁,假设数据集不包含足够的此温度范围内的示例,无法训练模型做出准确的预测。不过,请注意,在推理过程中,经过剪裁的模型会对温度为 45 和温度为 35 做出相同的预测。