目次
1.数字変数のエンコーディング
1.1 OrdinalEncoder
1.2 CountEncoder
2. ダミー値エンコーディング
2.1 OneHotEncoder
2.2 SumEncoder
2.3 BinaryEncoder
2.4 BaseNEncoder
2.5 HashingEncoder
3. 別のレベルの比較エンコーディング
3.1 HelmertEncoder
3.2 BackwardDifferenceEncoder
3.3 PolynomialEncoder
4. ターゲットありエンコーダー
4.1 TargetEncoder
4.2 LeaveOneOutEncoder
4.3 MEstimateEncoder
4.4 CatBoostEncoder
4.5 GLMMEncoder
4.6 JamesSteinEncoder
4.7 WOEEncoder
ライブラリのインストール
!pip install category_encoders |
ライブラリのインポート
import category_encoders as ce |
1.数字変数のエンコーディング
1.1 OrdinalEncoder
サンプルデータ作成
import pandas as pd
df = pd.DataFrame({‘color’: [‘Red’, ‘Green’,’Red’, ‘Red’, ‘Blue’, ‘Blue’]}) print(df) |
color
0 Red
1 Green
2 Red
3 Red
4 Blue
5 Blue
OrdinalEncoderは、整数の単一列を使用してクラスを表します。
ce_ord = ce.OrdinalEncoder(cols = [‘color’]) encoded_df = ce_ord.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color color
0 Red 1
1 Green 2
2 Red 1
3 Red 1
4 Blue 3
5 Blue 3
1.2 CountEncoder
特定のカテゴリ機能について、グループの名前をグループ数に置き換えます。
ce_ord = ce.CountEncoder(cols = [‘color’]) encoded_df = ce_ord.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color color
0 Red 3
1 Green 1
2 Red 3
3 Red 3
4 Blue 2
5 Blue 2
2. ダミー値エンコーディング
2.1 OneHotEncoder
OneHotEncoder(またはダミー)コーディングは、カテゴリごとに0か1の値を生成していきます。
Encoder = ce.OneHotEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color color_1 color_2 color_3
0 Red 1 0 0
1 Green 0 1 0
2 Red 1 0 0
3 Red 1 0 0
4 Blue 0 0 1
5 Blue 0 0 1
2.2 SumEncoder
1つの水準を全て-1で表現し、残りはOne-Hotで表現します。
Encoder = ce.SumEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color intercept color_0 color_1
0 Red 1 1.0 0.0
1 Green 1 0.0 1.0
2 Red 1 1.0 0.0
3 Red 1 1.0 0.0
4 Blue 1 -1.0 -1.0
5 Blue 1 -1.0 -1.0
2.3 BinaryEncoder
カテゴリ変数のバイナリエンコーディング。Onehotencoderに似ていますが、カテゴリを
文字列として格納します。
Encoder = ce.BinaryEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color color_0 color_1 color_2
0 Red 0 0 1
1 Green 0 1 0
2 Red 0 0 1
3 Red 0 0 1
4 Blue 0 1 1
5 Blue 0 1 1
2.4 BaseNEncoder
BaseNEncoderはbaseオプションに指定する値によって、One-Hot / Binary / Ordinal Encodingを使い分けることができます。
1のベースはワンホットエンコーディング(実際にはベース1ではありませんが、便利です)と同等であり、2のベースはバイナリエンコーディングと同等です。
Encoder = ce.BaseNEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color color_0 color_1 color_2
0 Red 0 0 1
1 Green 0 1 0
2 Red 0 0 1
3 Red 0 0 1
4 Blue 0 1 1
5 Blue 0 1 1
2.5 HashingEncoder
構成可能な次元/精度を備えた多変量ハッシュの実装です。このエンコーダーの利点は、観察されたカテゴリーの辞書を維持しないことです。 その結果、エンコーダーのサイズが大きくなることはなく、設計によるデータスコアリング中に新しい値を受け入れます。
Encoder = ce.HashingEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color col_0 col_1 col_2 col_3 col_4 col_5 col_6 col_7
0 Red 0 0 0 0 0 0 0 1
1 Green 0 1 0 0 0 0 0 0
2 Red 0 0 0 0 0 0 0 1
3 Red 0 0 0 0 0 0 0 1
4 Blue 0 1 0 0 0 0 0 0
5 Blue 0 1 0 0 0 0 0 0
3. 別のレベルの比較エンコーディング
3.1 HelmertEncoder
カテゴリ特徴をエンコードするためのヘルマート対比コーディングです。
Encoder = ce.HelmertEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color intercept color_0 color_1
0 Red 1 -1.0 -1.0
1 Green 1 1.0 -1.0
2 Red 1 -1.0 -1.0
3 Red 1 -1.0 -1.0
4 Blue 1 0.0 2.0
5 Blue 1 0.0 2.0
3.2 BackwardDifferenceEncoder
カテゴリ変数をエンコードするための後方差分コントラストコーディングです。
Encoder = ce.BackwardDifferenceEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color intercept color_0 color_1
0 Red 1 -0.666667 -0.333333
1 Green 1 0.333333 -0.333333
2 Red 1 -0.666667 -0.333333
3 Red 1 -0.666667 -0.333333
4 Blue 1 0.333333 0.666667
5 Blue 1 0.333333 0.666667
3.3 PolynomialEncoder
カテゴリ特徴の符号化のための多項式対比符号化します。
Encoder = ce.PolynomialEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df) print(pd.concat([df, encoded_df], axis=1)) |
color intercept color_0 color_1
0 Red 1 -7.071068e-01 0.408248
1 Green 1 -4.433780e-17 -0.816497
2 Red 1 -7.071068e-01 0.408248
3 Red 1 -7.071068e-01 0.408248
4 Blue 1 7.071068e-01 0.408248
5 Blue 1 7.071068e-01 0.408248
4. ターゲットありエンコーダー
4.1 TargetEncoder
カテゴリターゲットの場合:特徴は、特定のカテゴリ値が与えられた場合のターゲットの事後確率と、すべてのトレーニングデータにわたるターゲットの事前確率の割合に置き換えられます。
連続ターゲットの場合:機能は、特定のカテゴリ値が与えられた場合のターゲットの期待値と、すべてのトレーニングデータにわたるターゲットの期待値の値に置き換えられます。
データ作成
df2 = pd.DataFrame({‘color’: [‘Red’, ‘Green’,’Red’, ‘Red’, ‘Blue’, ‘Blue’], ‘value’: [1, 2, 2, 1, 3, 1] }) print(df2) |
Encoder = ce.TargetEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 1.373068
1 Green 2 1.666667
2 Red 2 1.373068
3 Red 1 1.373068
4 Blue 3 1.910353
5 Blue 1 1.910353
4.2 LeaveOneOutEncoder
これはターゲットエンコーディングと非常に似ていますが、外れ値の影響を減らすためにレベルの平均ターゲットを計算するときに現在の行のターゲットを除外します。
Encoder = ce.LeaveOneOutEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 1.500000
1 Green 2 1.666667
2 Red 2 1.000000
3 Red 1 1.500000
4 Blue 3 1.000000
5 Blue 1 3.000000
4.3 MEstimateEncoder
これは、ターゲットエンコーダーの簡略化されたバージョンであり、m確率推定や、既知の発生率による追加平滑化などの名前が付けられています。 ターゲットエンコーダーと比較すると、m確率推定には1つの調整可能なパラメーター(m)しかありませんが、ターゲットエンコーダーには2つの調整可能なパラメーター(min_samples_leafとsmoothing)があります。
Encoder = ce.MEstimateEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
Encoder = ce.MEstimateEncoder(cols=[‘color’])
encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’])
print(pd.concat([df2, encoded_df], axis=1))
4.4 CatBoostEncoder
これは、leave-one-outエンコーディングと非常に似ていますが、値を「オンザフライ」で計算します。 したがって、値はトレーニングフェーズ中に自然に変化し、ランダムノイズを追加する必要はありません。
Encoder = ce.CatBoostEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 1.666667
1 Green 2 1.666667
2 Red 2 1.333333
3 Red 1 1.555556
4 Blue 3 1.666667
5 Blue 1 2.333333
4.5 GLMMEncoder
これは、TargetEncoderまたはMEstimateEncoderに似た教師ありエンコーダですが、いくつかの利点があります。
1)技術の背後にある確かな統計理論。 混合効果モデルは、統計の成熟した分野です。
2)調整するハイパーパラメータはありません。 収縮量は、推定プロセスによって自動的に決定されます。
3)この手法は、連続ターゲットと二項ターゲットの両方に適用できます。
Encoder = ce.GLMMEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 -0.004782
1 Green 2 0.001599
2 Red 2 -0.004782
3 Red 1 -0.004782
4 Blue 3 0.003183
5 Blue 1 0.003183
4.6 JamesSteinEncoder
特徴値iの場合、James-Stein推定量は次の加重平均を返します。
観測された特徴値の平均目標値iです。
平均目標値(機能値に関係なく)
Encoder = ce.JamesSteinEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df2[‘color’], df2[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 1.333333
1 Green 2 2.000000
2 Red 2 1.333333
3 Red 1 1.333333
4 Blue 3 2.000000
5 Blue 1 2.000000
4.7 WOEEncoder
カテゴリ機能のエビデンスコーディングの重みです。
サポートされるターゲットは二項でなければなりません。
サンプルデータを作成します。
df3 = pd.DataFrame({‘color’: [‘Red’, ‘Green’,’Red’, ‘Red’, ‘Blue’, ‘Blue’], ‘value’: [1, 0, 1, 1, 0, 1] }) print(df3) |
color value
0 Red 1
1 Green 0
2 Red 1
3 Red 1
4 Blue 0
5 Blue 1
Encoder = ce.WOEEncoder(cols=[‘color’]) encoded_df = Encoder.fit_transform(df3[‘color’], df3[‘value’]) print(pd.concat([df2, encoded_df], axis=1)) |
color value color
0 Red 1 0.980829
1 Green 2 0.000000
2 Red 2 0.980829
3 Red 1 0.980829
4 Blue 3 -0.405465
5 Blue 1 -0.405465
担当者:HM
香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属