特征工程中的「归一化」有什么作用?

特征工程中的「归一化」有什么作用?

不少答主都解释了为什么消除量纲可以加速优化过程,直观角度可以参考 @忆臻的回答(他的最高票回答指的不是我的答案)。我想在大家回答上补充一些内容:

在这个回答下,我们对一维数据的缩放有如下定义:

其中 和 代表样本的均值和标准差, 为最大值, 为最小值。

先看归一化,在数据给定的前提下,令常数 ,常数 ,那么归一化的新的形式就是 。在这种改写后下,易发现和标准化形式 类似,因为在数据给定后 和 也可看做常数。

因此可以再稍微变形一下: (公式1)

就发现事实上就是对向量 按照比例压缩再进行平移 。所以归一化和标准化的本质就是一种线性变换。

举个简单的例子:

线性变换有很多良好的性质,这些性质决定了为什么对数据进行改变后竟然不会造成“失效”,反而还能提高数据的表现。拿其中很重要的一个性质为例,线性变化不改变原始数据的数值排序。

感兴趣的朋友可以试试下面的代码,就会发现这两种处理方法都不会改变数据的排序。对于很多模型来说,这个性质保证了数据依然有意义,顺序性不变,而不会造成了额外的影响。

说白了,只是因为线性变换保持线性组合与线性关系式不变,这保证了特定模型不会失效,忘记的朋友需要翻翻高数课本。

我们已经说明了它们的本质是缩放和平移,但区别是什么呢?在不涉及线性代数的前提下,我们给出一些直觉的解释:归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放是更加“弹性”和“动态”的,和整体样本的分布有很大的关系。值得注意:

当数据较为集中时, 更小,于是数据在标准化后就会更加分散。如果数据本身分布很广,那么 较大,数据就会被集中到更小的范围内。

从输出范围角度来看, 必须在0-1间。对比来看,显然 ,甚至在极端情况下 ,所以标准化的输出范围一定比归一化更广。

我们已经从第三部分得到了一些性质,因此可以得到以下结论:

一般来说,我个人建议优先使用标准化。在对输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出调整到0-1,如果我们对于数据的分布有假设的话,更加有效方法是使用相对应的概率密度函数来转换。让我们以高斯分布为例,我们可以首先计算高斯误差函数(Gaussian Error Function),此处定为 ,那么可用下式进行转化:

具体讨论可参考我的文章 机器学习「输出概率化」:一种无监督的方法。