sklearn 的preprocessing提供了可以满足需求的归一化方法。
1.standardScalar
标准化数据通过减去均值然后除以方差(标准差),这种标准化方法经过处理后,数据符合标准正态分布,即均值为0,标准差为1.
适用于,数据的分布本来就符合正态分布 x =(x - ?)/?。
通常这种方法基本可用于有outlier的情况,但是,在计算方差和均值的时候outliers仍然会影响计算。所以,在出现outliers的情况下可能会出现转换后的数的不同feature分布完全不同的情况。

2.minmaxScalar
将特征缩放至特定区间,在给定的最大值和最小值之间,或者也可以将每个特征的最大绝对值转换为单位大小,这种方法就是对原始数据进行单位变化,将数据转换到[0,1]之间
x = (x-min)/(max-min)
缺陷:当所有数据加入时,最大最小可能会发生变化,需要重新定义。
这种方法就对outlier十分敏感,因为outlier很影响最大最小值。

3.robusterScalar
如果你的数据中,含有很多异常值,用均值和方差缩放可能并不是很好的办法,这时,可以选择robusterscalar作为替代品,可以对数据的中心以及范围使用更具有鲁棒性。去除中位数,取四分位距离,也很好的排除了outlier.

2.4 [0, 1] 还是 [-1, 1] ?
假设我们有一个只有一个hidden layer的多层感知机(MLP)的分类问题。每个hidden unit表示一个超平面,每个超平面是一个分类边界。参数w(weight)决定超平面的方向,参数b(bias)决定超平面离原点的距离。如果b是一些小的随机参数(事实上,b确实被初始化为很小的随机参数),那么所有的超平面都几乎穿过原点。所以,如果data没有中心化在原点周围,那么这个超平面可能没有穿过这些data,也就是说,这些data都在超平面的一侧。这样的话,局部极小点(local minima)很有可能出现。 所以,在这种情况下,标准化到[-1, 1]比[0, 1]更好。

1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好。

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用MinMaxScaler。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

原因是使用MinMaxScaler,其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。

而在StandardScaler中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。