通过统计和可视化技术检查数据后,您应以有助于模型更高效训练的方式转换数据。目标 归一化是将 具有相似的规模。例如,请考虑以下两个地图项:
- 特征
X
的范围介于 154 到 24,917,482 之间。 - 特征
Y
的范围为 5 到 22。
这两个特征的范围截然不同。归一化可能会操纵
X
和 Y
,使其跨越相似的范围,可能是 0 到 1。
归一化具有以下优势:
- 有助于模型在训练期间更快地收敛。 当不同的特征具有不同的范围时,梯度下降法可以 “弹跳”和缓慢收敛。尽管如此,像下面这样更高级的优化器 阿达格勒 而 Adam 则通过以下方式避免此问题: 有效学习速率随时间的变化而变化。
- 有助于模型推断出更好的预测。 如果不同特征具有不同的范围,则生成的模型可能会做出不太实用的预测。
- 有助于在特征值非常高时避免“NaN 陷阱”。
NaN 是
不是数字。当模型中的值超过
浮点精度限制,系统会改为将值设置为
NaN
代表数字。当模型中的一个数字变成 NaN 时,模型中的其他数字最终也会变成 NaN。 - 帮助模型为每个特征学习合适的权重。 如果不进行特征缩放,则模型会过于关注 特征范围较大,但对具有不同特征的特征 缩小范围。
我们建议对数字特征进行归一化处理,以明确涵盖
不同的范围(例如年龄和收入)。
我们还建议对涵盖宽泛范围的单个数值特征进行归一化,例如 city population.
请考虑以下两个功能:
- 地图项
A
的最低值为 -0.5,最高值为 +0.5。 - 地图项
B
的最低值为 -5.0,最高值为 +5.0。
特征 A
和特征 B
的跨度相对较窄。不过,特征B
span 是特征 A
span 的 10 倍。因此:
- 在训练开始时,模型假定特征
A
比特征B
重要 10 倍。 - 训练时间会超出预期。
- 生成的模型可能不够理想。
因未标准化而导致的总体损害相对较小;不过, 我们仍然建议将特征 A 和特征 B 归一化为相同的比例, 可能是-1.0 到+1.0
现在,考虑两个范围差异更大的地图项:
- 地图项
C
的最低值为 -1,最高值为 +1。 - 地图项
D
的最低值为 +5000,最高值为 +1,000,000,000。
如果您不对特征 C
和特征 D
进行标准化处理,则模型的效果可能不太理想。此外,训练需要更长的时间来
甚至无法完全收敛!
本部分介绍了三种常用的标准化方法:
- 线性缩放
- Z 分数缩放
- 日志扩缩
本部分还介绍了剪裁。虽然这不是真正的归一化技术,但剪裁确实可以将不规则的数值特征归入到可生成更好模型的范围内。
线性缩放
线性缩放(较为常见) (简称为“Scaling”)表示将浮点值从缩放格式转换为 用户的自然范围进入一个标准范围(通常为 0 到 1 之间) -1 至 +1。
当满足以下所有条件时,线性扩缩是一个不错的选择:
- 数据的下限和上限随时间的推移变化不大。
- 特征包含的离群值很少或根本没有离群值, 极端。
- 特征在其范围内大致均匀分布。 也就是说,对于大多数值,直方图将显示大致均匀的条形。
假设人 age
是特征。线性放大对 age
来说是一种很好的标准化方法,因为:
- 近似下限和上限介于 0 到 100 之间。
age
包含相对较小比例的离群值。只有大约 0.3% 的人口年龄超过 100 周岁。- 虽然某些年龄段的代表性略高于其他年龄段,但大型数据集应包含所有年龄段的足够示例。
练习:检查您的理解情况
假设您的模型有一个名为net_worth
的特征,
价值不尽相同线性缩放是很好的归一化吗?
net_worth
的技巧?请说明原因。
Z 得分缩放
Z-score 是一个值与平均值之间的标准差数量。 例如,一个值大于平均值 2 个标准差 Z-score 为 +2.0。如果某个值比平均值低 1.5 个标准差,则其 Z 得分为 -1.5。
使用 Z 得分缩放表示特征意味着在特征向量中存储该特征的 Z 得分。例如,下图显示了两个直方图:
- 左侧为经典正态分布。
- 右侧是通过 Z 得分缩放法归一化的相同分布。
对于下图中显示的仅具有模糊正态分布的数据,z 分位数缩放也是一个不错的选择。
如果数据符合正态分布或 分布(类似于正态分布)。
请注意,某些分布在大部分地区内可能是正常的。
但仍包含极端离群值。例如,net_worth
地图项中的几乎所有数据点都可能恰好落在 3 个标准差内,但此地图项的部分示例可能与平均值相差数百个标准差。在这些情况下,您可以将 Z 得分缩放与另一种归一化形式(通常是剪裁)结合使用来处理此类情况。
练习:检查您的理解情况
假设您的模型使用名为height
的特征进行训练,该特征包含 1,000 万名女性的成人身高。Z-score 调整是否是有效的标准化
height
的技巧?请说明原因。
对数缩放
对数缩放计算原始值的对数。从理论上讲, 对数可以是任意基数;在实践中,对数缩放通常计算 自然对数 (ln)。
当数据符合幂律分布时,对数据进行对数缩放会很有帮助。一般来说,幂律分布如下所示:
X
的低值具有非常高的值Y
。- 随着
X
值的增加,Y
值会快速下降。因此,X
值越高,Y
值越低。
电影评分就是幂律分布的绝佳示例。在下图中,请注意以下事项:
- 有些电影有很多用户评分。(
X
值越低,Y
值越高。) - 大多数电影的用户评分都很低。(
X
值越高,Y
值越低。)
对数缩放可改变分布,这有助于训练出 做出更好的预测。
再举一个例子,图书销量遵循幂律分布,因为:
- 大多数出版的图书销量都很少,可能只有一两百本。
- 有些图书只卖出适量,甚至有数千本。
- 只有少数畅销书能卖出一百万以上。
假设您正在训练一个线性模型来查找 例如图书封面和图书销售使用原始值训练的线性模型将 在销售数百万册的图书上寻找一些关于图书封面的信息 它比只销售 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 的值。而是意味着所有大于 100 的 变成了 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 摄氏度之间,但以下情况除外:
- 每年一两次,在极热的天气,
31 和 45 是用
temperature
录制的。 temperature
中的每 1,000 个点都设为 1,000,而不是实际温度。
哪种归一化方法适合 temperature
?
1,000 值是错误值,应将其删除,而不是 已截短。
介于 31 到 45 之间的值是合法的数据点。 对于这些值,裁剪可能是一个好主意,假设 数据集在此温度范围内没有足够的示例, 训练模型以做出良好的预测。不过,请注意,在推理过程中,经过剪裁的模型会对温度为 45 和 35 的输入做出相同的预测。