データの前処理の9つの方法-sklearn.preprocessing
5594 ワード
本稿ではpythonでよく見られるデータの前処理方法をまとめ、sklearnのpreprocessingモジュールで紹介します.
1.標準化(Standardization or Mean Removal and Variance Scale)
変換後の各次元フィーチャーには0平均、単位分散があります.z-score正規化(ゼロ平均規範化)とも呼ばれる.計算方法は、フィーチャー値から平均値を減算し、標準差で除算します.
?
1
一般的にtrainとtestセットを一緒に標準化したり、trainセットで標準化したりした後、同じ標準化器でtestセットを標準化したりしますが、この場合scalerを使うことができます
?
1
2
3
実際の応用では、特徴の標準化が必要な一般的なシナリオ:SVM
2.最小-最大正規化
最小-最大正規化元のデータを線形変換し、[0,1]区間(他の固定最小最大値の区間であってもよい)に変換する
?
1
2
3.正規化(Normalization)
正規化は、異なる変化範囲の値を同じ固定範囲にマッピングし、一般的には[0,1]であり、この場合も正規化と呼ばれる.
各サンプルをunit normに変換します.
?
1
2
取得:
?
1
各試料に対して0.4^2+0.4^2+0.81^2=1があり,これがL 2 normであり,変換後の各試料の各次元特性の二乗和は1であることが分かった.同様に、L 1 normは、変換後の各サンプルの各次元特徴の絶対値であり、1である.またmax normは、各サンプルの各次元特徴をそのサンプルの各次元特徴の最大値で割ったものである.メトリックサンプル間の類似性の場合、二次型kernelを使用している場合は、Normalizationを作成する必要があります.
4.特徴二値化(Binarization)
しきい値を指定し、フィーチャーを0/1に変換
?
1
2
5.ラベル二値化(Label binarization)
?
1
6.カテゴリ特徴符号化
特徴はカテゴリ型であり、一部のアルゴリズムの入力は数値型でなければならない場合があります.この場合、符号化する必要があります.
?
1
2
3
上記の例では、1次元の特徴は2つの値0と1であり、2ビットで符号化される.2 D目は3ビット、3 D目は4ビットです.
もう一つの符号化方式
?
1
7.ラベルコード(Label encoding)
?
1
2
3
4
5
6
8.特徴に異常値が含まれている場合
?
1
9.多項式フィーチャーの生成
これは実際には特徴工学に関連しており,多項式特徴/交差特徴である.
?
1
2
元のフィーチャー:
変換後:
まとめ
以上、pythonでよく使われる9つの前処理方法をまとめました.
1.標準化(Standardization or Mean Removal and Variance Scale)
変換後の各次元フィーチャーには0平均、単位分散があります.z-score正規化(ゼロ平均規範化)とも呼ばれる.計算方法は、フィーチャー値から平均値を減算し、標準差で除算します.
?
1
sklearn.preprocessing.scale(X)
一般的にtrainとtestセットを一緒に標準化したり、trainセットで標準化したりした後、同じ標準化器でtestセットを標準化したりしますが、この場合scalerを使うことができます
?
1
2
3
scaler
=
sklearn.preprocessing.StandardScaler().fit(train)
scaler.transform(train)
scaler.transform(test)
実際の応用では、特徴の標準化が必要な一般的なシナリオ:SVM
2.最小-最大正規化
最小-最大正規化元のデータを線形変換し、[0,1]区間(他の固定最小最大値の区間であってもよい)に変換する
?
1
2
min_max_scaler
=
sklearn.preprocessing.MinMaxScaler()
min_max_scaler.fit_transform(X_train)
3.正規化(Normalization)
正規化は、異なる変化範囲の値を同じ固定範囲にマッピングし、一般的には[0,1]であり、この場合も正規化と呼ばれる.
各サンプルをunit normに変換します.
?
1
2
X
=
[[
1
,
-
1
,
2
],[
2
,
0
,
0
], [
0
,
1
,
-
1
]]
sklearn.preprocessing.normalize(X, norm
=
'l2'
)
取得:
?
1
array([[
0.40
,
-
0.40
,
0.81
], [
1
,
0
,
0
], [
0
,
0.70
,
-
0.70
]])
各試料に対して0.4^2+0.4^2+0.81^2=1があり,これがL 2 normであり,変換後の各試料の各次元特性の二乗和は1であることが分かった.同様に、L 1 normは、変換後の各サンプルの各次元特徴の絶対値であり、1である.またmax normは、各サンプルの各次元特徴をそのサンプルの各次元特徴の最大値で割ったものである.メトリックサンプル間の類似性の場合、二次型kernelを使用している場合は、Normalizationを作成する必要があります.
4.特徴二値化(Binarization)
しきい値を指定し、フィーチャーを0/1に変換
?
1
2
binarizer
=
sklearn.preprocessing.Binarizer(threshold
=
1.1
)
binarizer.transform(X)
5.ラベル二値化(Label binarization)
?
1
lb
=
sklearn.preprocessing.LabelBinarizer()
6.カテゴリ特徴符号化
特徴はカテゴリ型であり、一部のアルゴリズムの入力は数値型でなければならない場合があります.この場合、符号化する必要があります.
?
1
2
3
enc
=
preprocessing.OneHotEncoder()
enc.fit([[
0
,
0
,
3
], [
1
,
1
,
0
], [
0
,
2
,
1
], [
1
,
0
,
2
]])
enc.transform([[
0
,
1
,
3
]]).toarray()
#array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])
上記の例では、1次元の特徴は2つの値0と1であり、2ビットで符号化される.2 D目は3ビット、3 D目は4ビットです.
もう一つの符号化方式
?
1
newdf
=
pd.get_dummies(df,columns
=
[
"gender"
,
"title"
],dummy_na
=
True
)
7.ラベルコード(Label encoding)
?
1
2
3
4
5
6
le
=
sklearn.preprocessing.LabelEncoder()
le.fit([
1
,
2
,
2
,
6
])
le.transform([
1
,
1
,
2
,
6
])
#array([0, 0, 1, 2])
#
le.fit([
"paris"
,
"paris"
,
"tokyo"
,
"amsterdam"
])
le.transform([
"tokyo"
,
"tokyo"
,
"paris"
])
#array([2, 2, 1])
8.特徴に異常値が含まれている場合
?
1
sklearn.preprocessing.robust_scale
9.多項式フィーチャーの生成
これは実際には特徴工学に関連しており,多項式特徴/交差特徴である.
?
1
2
poly
=
sklearn.preprocessing.PolynomialFeatures(
2
)
poly.fit_transform(X)
元のフィーチャー:
変換後:
まとめ
以上、pythonでよく使われる9つの前処理方法をまとめました.