归一化 Normalize

把数据映射到[0,1]之间。
适用于分布有明显边界的情况,需要知道数据的最大值和最小值,受outlier影响较大。

$$ x_{scale} = \frac {x - x_{min}}{x_{max} - x_{min}} $$

如果使用训练数据的最大值和最小值,则可能出现测试数据超出范围的情况。
可以把超出范围的数据drop或者cutdown。

sklearn实现:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0,1))
scaler = scaler.fit(values)
normalized = scaler.transform(values)
inversed = scaler.inverse_transform(normalized)

标准化 Standardize

把数据映射到均值为0方差为1的分布中。
数据分布没有明显的边界,有可能存在极端的数据值。但需要知道数据的均值和方差。

$$ x_{scale} = \frac {x-x_{mean}}{S} $$

通常使用训练数据的均值和方差。

sklearn实现:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler = scaler.fit(values)
normalized = scaler.transform(values)
inversed = scaler.inverse_transform(normalized)