回答:
私もこのトピックを学んでいましたが、これらは私が見つけたものです:
このタイプのエンコーディングは、尤度エンコーディング、インパクトコーディング、またはターゲットコーディングと呼ばれます。
目的は、ターゲット変数(タスクに応じて連続的またはカテゴリカル)を使用してカテゴリ変数をエンコードすることです。たとえば、回帰タスクがある場合は、カテゴリ変数をターゲットの平均でエンコードできます。すべてのカテゴリについて、(このカテゴリ間で)ターゲットの対応する平均を計算し、カテゴリの値をこの平均で置き換えます。
分類タスクがある場合は、すべてのカテゴリ値に関してターゲットの相対頻度を計算します。
数学的な観点から見ると、このエンコードは、各カテゴリ値に応じて、ターゲットの確率を意味します。
上記の簡単な方法でそれを行うと、おそらく偏った推定値が得られます。そのため、Kaggleコミュニティでは、通常2レベルの相互検証を使用します。読むここraddarでこのコメントを。対応するノートブックはこちらです。
引用:
yの平均値を取っています。しかし、単純な意味ではなく、クロスバリデーションの方法でのクロスバリデーションです。
20倍の相互検証があるとします。#2折り目からの情報のみを使用して、#1折り目の特徴の平均値を計算する必要があります。
したがって、#2〜#20の折り目を取り、その中に別の相互検証セットを作成します(10倍にしました)。Leave-One-Outフォールドごとに平均値を計算します(最終的に10の平均値を取得します)。これらの10個の平均を平均し、そのベクトルをプライマリ#1検証セットに適用します。残りの19の折り畳みについてもこれを繰り返します。
説明するのは難しく、理解するのも習得するのも難しいです:)しかし、正しく行われれば多くの利点をもたらすことができます:)
このエンコーディングの別の実装はこちらです。
Rライブラリvtreatでは、インパクトエンコーディングが実装されています。この投稿を参照してください。
でCatBoostライブラリ彼らがターゲットエンコーディングを含むカテゴリ変数のエンコーディングのための多くのオプションを持っています。
sklearnにはそのようなエンコーディングはまだありません。
target_encoders パッケージを介して、sklearnでターゲットエンコーディングを使用できるようになりました。
ターゲットエンコーダ
class category_encoders.target_encoder.TargetEncoder(verbose = 0、cols = None、drop_invariant = False、return_df = True、impute_missing = True、handle_unknown = 'impute'、min_samples_leaf = 1、smoothing = 1)
カテゴリ機能のターゲットエンコード。休暇1アウト・アプローチに基づきます。
上記のコメントにジョシュで述べたように。