Scaling / Normalization / Standardization
1. ScalingPermalink
这个简单,scaling 一般指
2. StandardizationPermalink
使数据符合 standard normal distribution
- centering:
- scaling by standard deviation:
注意:
是 是 variance 是 standard deviation (也叫 unit variance)
所以合起来就是:
另外,对单个的 scalar
3. NormalizationPermalink
3.1 NormPermalink
Quote from Wikipedia: Norm (mathematics):
Given a vector space
- If
then is the zero vector.
常见的 norm 有:
norm: norm:- max norm:
3.2 Normalization Scenario 1: AlgebraPermalink
我们常说 “把一个 vector normalize 成一个 unit vector”,这其实是一个
我们可以看到:
我们经常可以看到 “normalization 把数据压缩到
- unit vector 的 norm 为 1,只能说明各项
的绝对值是在 区间内
3.3 Normalization Scenario 2: StatisticsPermalink
在统计学上说 normalization,那意思就海了去了。从 Normalization (statistics) 来看:
- standardization 是一种 normalization
- studentization 是一种 normalization
- min-max scaling 也是一种 normalization (而且它不符合我们的 scaling 定义)
3.4 The Problems with NormalizationPermalink
我觉得统计学上 normalization 定义的最大的问题是:我看不到这些变形与 norm 的关系。
然后随之而来的第二个问题:我怎么知道你说的 normalization 是 algebra 的还是 statistics 的?
比如 sklearn.preprocessing.normalize
,我一直以为它做的是 standardization,但其实不是!
- sklearn 的 standardization 要用
sklearn.preprocessing.StandardScaler
它做的其实是 vector normalization,但是它的 max norm 又不是标准的:
......:
......:
# https://github.com/scikit-learn/scikit-learn/blob/bac89c2/sklearn/preprocessing/data.py#L1564
if norm == 'l1':
norms = np.abs(X).sum(axis=1)
elif norm == 'l2':
norms = row_norms(X)
elif norm == 'max':
norms = np.max(X, axis=1) # You call this max norm???
norms = _handle_zeros_in_scale(norms, copy=False)
X /= norms[:, np.newaxis]
对于第二个问题,一个简单点的判别方法是:你看到
Comments