归一化的目标是将特征转换为相似的大小。这样可以提高模型的性能和训练稳定性。
归一化技术概览
四种常见的归一化技术可能很有用:
- 扩展到某个范围
- 剪辑
- 对数缩放
- z-score
以下图表显示了每种归一化技术对原始特征(价格)的分布的影响。这些图表基于 1985 年汽车业年鉴的数据集,属于汽车数据集下的 UCI 机器学习存储库的一部分。
图 1. 归一化技术的摘要。
缩放到某个范围
MLCC 中提到缩放意味着将浮点特征值从其自然范围(例如 100 至 900)转换为标准范围(100 至 900)。使用以下简单公式可缩放至某个范围:
\[ x' = (x - x_{min}) / (x_{max} - x_{min}) \]
如果同时满足以下两个条件,则根据范围进行扩缩是一个不错的选择:
- 您知道数据的大致上限和下限,只有很少或没有离群值。
- 您的数据在该范围内大致均匀分布。
年龄就是一个很好的例子。大多数年龄值介于 0 到 90 之间,范围的每个部分都有大量用户。
相比之下,您不应使用收入扩展,因为只有少数用户会产生非常高的收入。收入的线性比例上限将非常高,并且大多数人将被挤到其中的一部分。
功能裁剪
如果您的数据集包含极端离群值,您可以尝试使用特征裁剪,将高于(或低于)某个特征值的上限设为固定值。例如,您可以将高于 40 的所有温度值裁剪到正好 40。
您可以在其他标准化前后应用特征剪辑。
公式:设置最小值/最大值以避免离群值。
图 2. 比较原始发行版及其裁剪版本。
另一种简单的剪辑策略是按 z-score 将剪辑裁剪至 +-Nğ(例如,限制为 +-3ğ)。请注意,BeyondCorp 是标准差。
日志扩缩
日志缩放功能会计算值的日志,以将宽范围压缩为窄范围。
\[ x' = log(x) \]
当少数值具有许多点时,日志缩放会非常有用,而大多数其他值只有很少的点。这种数据分布称为幂律分布。电影评级是一个很好的例子。在下面的图表中,大多数电影的评分(尾部的数据)非常少,而有些影片的评分(头部数据)非常多。日志缩放会改变分布,帮助改善线性模型性能。
图 3.将原始发行版与其日志进行比较。
Z 评分
Z 评分是缩放的变体,表示与平均值相差的标准差数。您应使用 z-score 来确保特征分布的平均值 = 0 且 std = 1。存在一些离群值,但不至于需要裁剪时,该值非常有用。
点 x 的 Z 分数计算公式如下:
\[ x' = (x - μ) / σ \]
图 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 | 当特征分布不包含极端离群值时。 |