機械学習におけるデータプリプロセッシング
4806 ワード
Standardizationは標準化され、できるだけデータを平均値がゼロ、分散が1のデータに変換し、標準正規分布(Gauss分布)のようにします.実際には、平均値を変更するだけでデータを集中させ、非連続的な特徴を標準差で除算するデータの分布は無視されます.sklearnのscale関数は、単純で高速なsinglearray-likeデータセット操作を提供します.
一、標準化、平均除去と分散スケール(Standardization,or mean removal and variance scaling)
データセットの標準化:個体の特徴があまりにも過剰であるか、明らかにGauss正規分布に従わない場合、標準化表現の効果は低い.実際の動作では,特徴データの分布形状を無視し,各特徴平均値を除去し,離散特徴の標準差を区分して等級化し,さらにデータ中心化を実現することが多い.
1.scaleゼロ平均単位分散
注:もともとは行で計算されています.
2.データセットが同じ変換を使用することをテストするために、トレーニングセットの平均値と標準差を計算します.
訓練セットが訓練した平均値、分散であり、試験セットに用いられる(試験セットは平均値を減らし、分散で割って変換する)
注意:1)with_を設定するとMean=Falseまたはwith_std=Falseであればcenteringやscaling処理はしません.
2)scaleとStandardScalerは回帰モデルの目標値処理に使用できる
二、データ特徴をある範囲に拡大縮小する(scalingfeatures to a range)
もう1つの標準化方法は、所与の最小値と最大値の間、通常0と1の間にデータをスケーリングすることであり、MinMaxScalerによって実現することができる.あるいは最大の絶対値を単位サイズにスケールし、MaxAbsScalerで実現できます.
このような標準化手法を用いる理由は,データセットの標準差が非常に小さい場合や,データ中にゼロ(疎データ)が多く0要素を保存する必要がある場合があるためである.
1.MinMaxScale(最小最大値標準化)
数式:X_std = (X - X.min(axis=0))/(X.max(axis=0) - X.min(axis=0)) ;
X_scaler = X_std/(max - min) + min
fit関数:fit,fit_のみtransformはfitで変換されます
2.MaxAbsScaler(絶対値最大標準化)
各数を絶対値の最大数で割った絶対値
上記の標準化方法と同様であるが、トレーニングセットは最大値で除算することによって[−1,1]にスケーリングされる.これは、データが0を中心としているか、非常に多くの0を含む疎なデータであることを意味する.
三、正規化(Normalization)
正規化のプロセスは、各サンプルを単位サンプル(各サンプルのサンプル数は1)にスケールすることであり、後で二次型(点積)や他のコア法を使用して2つのサンプル間の類似性を計算する場合に役立ちます.
Normalizationの主な考え方は、各サンプルについてそのp−ノルムを計算し、その後、サンプル中の各要素をノルムで除算することであり、この処理の結果、各処理後のサンプルのp−ノルム(l 1−norm,l 2−norm)が1に等しくなる.
p-ノルムの計算式:||X||p=(|x 1|^p+|x 2|^p+...+|xn|^p)^1/p
この方法は主にテキスト分類とクラスタリングに適用される.例えば、2つのTF−IDFベクトルのl 2−normを点積すると、これら2つのベクトルのコサイン類似性が得られる.
1、preprocessingを用いることができる.normalize()関数は、指定したデータを変換します.
2、processingを使用することができる.Normalizer()クラスは、トレーニングセットとテストセットのフィットと変換を実現します.
詳細なデータの事前処理方法は、公式ドキュメントを参照してください.http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling
一、標準化、平均除去と分散スケール(Standardization,or mean removal and variance scaling)
データセットの標準化:個体の特徴があまりにも過剰であるか、明らかにGauss正規分布に従わない場合、標準化表現の効果は低い.実際の動作では,特徴データの分布形状を無視し,各特徴平均値を除去し,離散特徴の標準差を区分して等級化し,さらにデータ中心化を実現することが多い.
1.scaleゼロ平均単位分散
from sklearn import preprocessing
import numpy as np
X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
X_scaled = preprocessing.scale(X)
print(X_scaled)
output:
[[ 0. -1.22474487 1.33630621]
[ 1.22474487 0. -0.26726124]
[-1.22474487 1.22474487 -1.06904497]]
#scaled ,
X_scaled.mean(axis=0) # column mean: array([ 0., 0., 0.])
X_scaled.std(axis=0) #column standard deviation: array([ 1., 1., 1.])
print(X_scaled.mean(axis=0),X_scaled.std(axis=0))
output:
[ 0. 0. 0.] [ 1. 1. 1.]
注:もともとは行で計算されています.
2.データセットが同じ変換を使用することをテストするために、トレーニングセットの平均値と標準差を計算します.
訓練セットが訓練した平均値、分散であり、試験セットに用いられる(試験セットは平均値を減らし、分散で割って変換する)
scaler = preprocessing.StandardScaler().fit(X)
print(scaler,scaler.mean_,scaler.scale_) # scaler.std_ sacler.scaler
# scaler ,
print('scaler.transform(X)',scaler.transform(X))
print(scaler.transform([[-1., 1., 0.]]) )
注意:1)with_を設定するとMean=Falseまたはwith_std=Falseであればcenteringやscaling処理はしません.
2)scaleとStandardScalerは回帰モデルの目標値処理に使用できる
二、データ特徴をある範囲に拡大縮小する(scalingfeatures to a range)
もう1つの標準化方法は、所与の最小値と最大値の間、通常0と1の間にデータをスケーリングすることであり、MinMaxScalerによって実現することができる.あるいは最大の絶対値を単位サイズにスケールし、MaxAbsScalerで実現できます.
このような標準化手法を用いる理由は,データセットの標準差が非常に小さい場合や,データ中にゼロ(疎データ)が多く0要素を保存する必要がある場合があるためである.
1.MinMaxScale(最小最大値標準化)
数式:X_std = (X - X.min(axis=0))/(X.max(axis=0) - X.min(axis=0)) ;
X_scaler = X_std/(max - min) + min
fit関数:fit,fit_のみtransformはfitで変換されます
# : [0, 1] 。 : fit_transform()
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)
print(X_train_minmax)
# scale
X_test = np.array([[ -3., -1., 4.]])
X_test_minmax = min_max_scaler.transform(X_test) #out: array([[-1.5 , 0. , 1.66666667]])
# scaler
print(min_max_scaler.scale_,min_max_scaler.min_)
#out: array([ 0.5 , 0.5, 0.33...])
#out: array([ 0., 0.5, 0.33...])
2.MaxAbsScaler(絶対値最大標準化)
各数を絶対値の最大数で割った絶対値
上記の標準化方法と同様であるが、トレーニングセットは最大値で除算することによって[−1,1]にスケーリングされる.これは、データが0を中心としているか、非常に多くの0を含む疎なデータであることを意味する.
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
# doctest +NORMALIZE_WHITESPACE^, out: array([[ 0.5, -1., 1. ], [ 1. , 0. , 0. ], [ 0. , 1. , -0.5]])
X_test = np.array([[ -3., -1., 4.]])
X_test_maxabs = max_abs_scaler.transform(X_test) #out: array([[-1.5, -1. , 2. ]])
max_abs_scaler.scale_ #out: array([ 2., 1., 2.])
三、正規化(Normalization)
正規化のプロセスは、各サンプルを単位サンプル(各サンプルのサンプル数は1)にスケールすることであり、後で二次型(点積)や他のコア法を使用して2つのサンプル間の類似性を計算する場合に役立ちます.
Normalizationの主な考え方は、各サンプルについてそのp−ノルムを計算し、その後、サンプル中の各要素をノルムで除算することであり、この処理の結果、各処理後のサンプルのp−ノルム(l 1−norm,l 2−norm)が1に等しくなる.
p-ノルムの計算式:||X||p=(|x 1|^p+|x 2|^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. ...]])
詳細なデータの事前処理方法は、公式ドキュメントを参照してください.http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling