Scale(標準化)とNormalization(正規化)の違い


一、標準化(Z-Score)標準化または平均値と分散スケールの除去
式は、(X-mean)/std計算時に各属性/列ごとにそれぞれ行います.
データは、期間属性(列ごと)から平均値を減算し、分散します.結果として、各属性/列ごとにすべてのデータが0付近に集約され、分散は1となる.実装には、次の2つの方法があります.
sklearn.preprocessing.scale()関数を使用すると、指定したデータを直接標準化できます.
sklearn.preprocessing.StandardScaleクラスを使用すると、トレーニングセットのパラメータ(平均、分散)を保存して、そのオブジェクト変換テストセットデータを直接使用できるという利点があります.
    >>> scaler = preprocessing.StandardScaler().fit(X)
    >>> scaler
    StandardScaler(copy=True, with_mean=True, with_std=True)
    >>> scaler.mean_                                      
    array([ 1. ...,  0. ...,  0.33...])
    >>> scaler.std_                                       
    array([ 0.81...,  0.81...,  1.24...])
    >>> scaler.transform(X)                               
    array([[ 0.  ..., -1.22...,  1.33...],
           [ 1.22...,  0.  ..., -0.26...],
           [-1.22...,  1.22..., -1.06...]])
    >>>#                   
    >>> scaler.transform([[-1.,  1., 0.]])                
    array([[-2.44...,  1.22..., -0.26...]])

二、属性を指定範囲に拡大縮小する
上記で説明した方法に加えて、もう1つの一般的な方法は、preprocessing.MinMaxScaleクラスによって実現できる指定された最大値と最小値(通常は1-0)の間に属性をスケールすることである.
この方法の目的は次のとおりです.
1.分散が非常に小さい属性に対して安定性を高めることができる.
2.疎行列で0のエントリを維持します.
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])
>>> #               
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
>>> #       
>>> min_max_scaler.scale_                             
array([ 0.5       ,  0.5       ,  0.33...])
>>> min_max_scaler.min_                               
array([ 0.        ,  0.5       ,  0.33...])

もちろん、クラスオブジェクトを構築するときに最大最小値の範囲:feature_を直接指定することもできます.range=(min,max)で、適用される式は次のようになります.
X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))
X_scaled=X_std/(max-min)+min

三、正規化(Normalization)
正規化のプロセスは、各サンプルを単位サンプル(各サンプルのサンプル数は1)にスケールすることであり、後で二次型(点積)や他のコア法を使用して2つのサンプル間の類似性を計算する場合に役立ちます.
Normalizationの主な考え方は、各サンプルについてそのp−ノルムを計算し、その後、サンプル中の各要素をノルムで除算することであり、この処理の結果、各処理後のサンプルのp−ノルム(l 1−norm,l 2−norm)が1に等しくなる.
         p-       :||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

この方法は主にテキスト分類とクラスタリングに適用される.例えば、2つのTF−IDFベクトルのl 2−normを点積すると、これら2つのベクトルのコサイン類似性が得られる.
1.preprocessing.normalize()関数を使用して、指定したデータを変換できます.
>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> X_normalized = preprocessing.normalize(X, norm='l2')
>>> X_normalized                                      
array([[ 0.40..., -0.40...,  0.81...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 0.  ...,  0.70..., -0.70...]])

2、processing.Normalizer()クラスを使用して、トレーニングセットとテストセットの適合と変換を実現することができる.
>>> normalizer = preprocessing.Normalizer().fit(X)  # fit does nothing
>>> normalizer
Normalizer(copy=True, norm='l2')
>>> normalizer.transform(X)                            
array([[ 0.40..., -0.40...,  0.81...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 0.  ...,  0.70..., -0.70...]])
>>> normalizer.transform([[-1.,  1., 0.]])             
array([[-0.70...,  0.70...,  0.  ...]])