在通过统计和可视化技术分析数据后 您应该采用某种方式来转换数据,以帮助您的模型训练更多 。目标 归一化是将 具有相似的规模。例如,请考虑以下两个 功能:
- 特征
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
跨度的 10 倍。因此:
- 在训练开始时,模型假定特征
A
为 10 倍 更“重要”与特征B
相比。 - 训练时间会超出预期。
- 生成的模型可能不够理想。
因未标准化而导致的总体损害相对较小;不过, 我们仍然建议将特征 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-score 是一个值与平均值之间的标准差数量。 例如,某个值比平均值大 2 个标准差 Z-score 为 +2.0。一个值小于 1.5 个标准差 平均值的 Z 分数为 -1.5。
使用 Z 分数缩放表示特征意味着存储该特征的 特征向量中的 Z-score。例如,下图显示了 直方图:
- 左侧为经典正态分布。
- 右侧则是采用 Z 分数缩放后的同一分布。
![图 4. 两个直方图:均显示正态分布,
相同分布。第一个直方图,其中包含原始
平均值为 200,标准差为 30。第二个
直方图,其中包含第一个
其平均值为 0,标准差为 1。](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling_classic.png?authuser=0&hl=da)
Z-score 调整也是一个不错的选择, 下图中只呈现了一个模糊的正态分布。
![图 5. 两个形状相同的直方图,每个直方图都显示一条陡峭
然后快速下降
逐渐衰减。一个直方图展示了
原始数据的分布情况;另一个直方图展示了
通过 Z 分数缩放时,原始数据的分布情况。
两个直方图 X 轴上的值大相径庭。
原始数据直方图涵盖域 0 到 29,000,而
Z-score 比例直方图的范围是 -1 到 +4.8 左右](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling-non-classic-normal-distribution.png?authuser=0&hl=da)
如果数据符合正态分布或 分布方式与正态分布相似。
请注意,某些分布在大部分地区内可能是正常的。
但仍包含极端离群值。例如,几乎所有的
net_worth
特征中的点可能恰好符合 3 个标准差,
但这个特征的几个例子可能是数百个标准差
偏离平均值。在这类情况下,您可以结合使用 Z 评分调整与
另一种形式的标准化(通常是裁剪)来处理这种情况。
练习:检查您的理解情况
假设您的模型在名为height
的特征上进行训练,该特征包含
我们有一千万名女性的身影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 的标准差)。不过,此功能包含
几个离群值,其中一些比较极端:
![图 7. RoomPerPerson 图,其中几乎所有的值
聚类在 0 到 4 之间,但有一个非常长的长尾
一直延伸到每人 17 个房间](https://developers.google.cn/static/machine-learning/crash-course/images/PreClipping.png?authuser=0&hl=da)
如何最大限度地降低这些极端离群值的影响?嗯,
直方图不是偶分布、正态分布或幂定律
分发。如果您简单地限制或裁剪
roomsPerPerson
是否设为任意值(比如 4.0)?
![RoomPerPerson 曲线图,其中所有值都介于 0 到 0 之间
4.0。曲线图是钟形的,但在 4.0 处有一个异常小山](https://developers.google.cn/static/machine-learning/crash-course/images/Clipping.png?authuser=0&hl=da)
将特征值限制在 4.0 并不意味着模型会忽略所有 值大于 4.0。而是表示所有 变成了 4.0这就解释了 4.0 点的奇特小山。尽管 现在,经过缩放的特征集比原始数据更有用。
等一下!您真的能将所有离群值降低到任意上限吗? 阈值?在训练模型时,答案是肯定的。
您还可以在应用其他形式的标准化之后裁剪值。 例如,假设您使用 Z 分数缩放,但一些离群值 绝对值远大于 3。在这种情况下,您可以:
- 将大于 3 的 Z 得分裁剪为正好 3。
- 将 Z-score 控制在 -3 以内,使其正好是 -3。
裁剪可防止模型在不重要的数据上建立过度索引。不过, 有些离群值实际上很重要,因此请谨慎裁剪值。
归一化方法摘要
归一化方法 | 公式 | 适用情形 |
---|---|---|
线性缩放 | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | 当特征在 固定的范围 |
Z 得分缩放 | $$ x' = \frac{x - μ}{σ}$$ | 当特征分布不包含极端离群值时。 |
对数缩放 | $$ x' = log(x)$$ | 当特征符合幂律时。 |
截短 | 如果 $x >max$,设置 $x'= max$ 如果 $x <最小值,设置 $x'= 最低金额 |
当特征包含极端离群值时。 |
练习:测试您的知识掌握情况
假设您正在开发一个模型来预测数据中心
根据数据中心内部测量的温度计算得出的生产力。
数据集中的几乎所有 temperature
值都落在
介于 15 到 30 摄氏度之间,但以下情况例外:
- 每年一两次,在极热的天气,
31 和 45 是用
temperature
录制的。 temperature
中的每 1,000 个点设置为 1,000 而不是实际温度
哪种归一化方法适合
temperature
?
1,000 值是错误值,应将其删除,而不是 已截短。
31 到 45 之间的值是合理的数据点。 对于这些值,裁剪可能是一个好主意,假设 数据集在此温度范围内没有足够的示例, 训练模型以做出良好的预测。然而,在推理过程中, 因此,裁剪模型对 如 45 度的温度,如 35 度的温度。