LeaveOneOutEncodingについて
ざっくりいうと、自分自身を除いた目的変数の平均値を割り出す手法です。
例) 以下のデータにおいて0行目をターゲットエンコーディングする際は、category=Aである1, 2行目を参考にするので0になる。
- 参考サイト
Leave One Out — Category Encoders 2.6.1 documentation
Target Encodingとは?3種類のターゲットエンコーディングとPython実装方法を徹底解説
使用するデータ
import pandas as pd df = pd.DataFrame({ 'category': ['A', 'A', 'A', 'B', 'B'], 'target': [1, 0, 0, 0, 1] })
df | df2 |
---|---|
使用方法
fit_transform
- 学習と適用を同時に行います。
- 例で示したように、dfの0列目なら1, 2行目を参考にするので0となります。
import category_encoders as ce encoded_data = ce.LeaveOneOutEncoder(cols=['category']).fit_transform(df['category'], df['target']) encoded_data
fit からの transform
- 学習を行った後、適用をします。
- 「Aは~、Bは~」というようにfitで学習してから、transformで適用するため、fit_transformと結果が微妙に異なります
- 例えば、dfの0列目をターゲットエンコーディングする際は、「fitで0, 1, 2列目から求めたAなら0.33333でエンコーディングする」という結果を使用します。
import category_encoders as ce enc = ce.LeaveOneOutEncoder(cols=['category']).fit(df['category'], df['target']) encoded_data_2 = enc.transform(df['category']) encoded_data_2
例(dfとdf2をターゲットエンコーディング)
- データの宣言は省略しています。
- リークが起こらないように、dfはtransform_fitで、df2はfit⇒transformとしました。
import category_encoders as ce # dfの学習 encoded_data = ce.LeaveOneOutEncoder(cols=['category']).fit_transform(df['category'], df['target']) # df2の学習 enc = ce.LeaveOneOutEncoder(cols=['category']).fit(df['category'], df['target']) encoded_data2 = enc.transform(df2['category']) # エンコーディングした結果を追加 df['category_encoded'] = encoded_data df2['category_encoded'] = encoded_data2
df | df2 |
---|---|