Yulao の「機械学習アルゴリズム コンペティションの実戦」のセクション 4.3 の記録を読んでください。主にカテゴリ関連の統計的特徴に対してターゲット エンコーディングを実行する方法が記録されています。
機械学習が複雑なパターン、特に異なる機能間の相互作用情報を認識することは難しいため、機能は直感またはビジネスの理解に基づいて構築する必要があります。
カテゴリ関連の統計的特徴については、次のことを考慮してください。
- オブジェクトコード
- カテゴリ特徴とターゲット変数を考慮する
- カウント、ユニーク、比率
- よく使用されるカテゴリ フィーチャの構築方法
- クラス機能のクロスコンビネーション
- カテゴリ特徴間の組み合わせ
オブジェクトコード
ターゲット エンコーディングは、ターゲット変数 (通常はラベル) 統計を使用してカテゴリ特徴をエンコードします。さまざまな質問については、次のとおりです。
- 分類: 陽性サンプルと陰性サンプルの数、陽性サンプルと陰性サンプルの比率
- 回帰: 統計的ターゲット変数の平均、中央値、最大値
直感的な理解: カテゴリの特徴をグループ化すると、各グループはターゲット変数の統計を使用してカテゴリのグループ化を置き換え (マッピング) ます。
パンダはこう言います:df.group('类别特征')['目标变量'].聚合操作
この本に掲載されているサンプルコードは次のとおりです。
folds = KFold(n_splits=5, shuffle=True, random_state=2020)
for col in columns:
colname = col+'_kfold'
# 5折交叉验证
for fold_, (trn_idx, val_idx) in enumerate(folds.split(train)):
tmp = train.iloc[trn_idx]
order_label = tmp.groupby([col])['label'].mean()
train[colname] = train[col].map(order_label)
......
# 处理 test 中类别特征数据
order_label = train.groupby([col])['label'].mean()
test[colname] = test[col].map(order_label)
分析します:
- 5分割交差検証では、対象変数(ラベル)の統計量を別の四半期サンプルで計算し、情報漏洩を防ぎます。つまり
order_label = tmp.groupby([col])['label'].mean()
、現時点ではであることに注意してくださいtmp
。その後、カテゴリ特徴の置換を実行するときに、val
対応する処理も実行する必要がありますtrain[colname] = train[col].map(order_label)
。 - データを処理する場合
test
、train
グループは .全体にわたって集計されます。 - 例としては、回帰問題のターゲット変数の平均をカウントすることが挙げられます。統計的な陽性サンプル比と陰性サンプル比などの分類問題の場合、次のように書くことができます
order_label = tmp.groupby([col])['label'].agg(lambda x: x.sum() / (1-x).sum())
。
他の
3 つの統計指標についてはcount, nunique, ratio
、この本で例がわかりやすく説明されています。 count (カウント特徴) は、カテゴリー特徴の出現頻度をカウントするために使用されます。nuniqueとratioの構築は比較的複雑であり、複数カテゴリの特徴量を組み合わせて構築する場合が多いが、例えば広告のクリック率予測の問題では、ユーザーIDと広告IDに対してnuniqueを使用することでユーザーの興味の幅を反映することができる広告、つまり統計では、ユーザー ID が複数の広告 ID を見たことがあり、使用率は、特定の種類の広告に対するユーザーの好み、つまり、ユーザー ID ごとに特定の種類の広告 ID をクリックする頻度の割合を反映することができます。ユーザーがすべての広告 ID をクリックした頻度に応じて変化します。
カテゴリ機能の相互組み合わせ: カテゴリの基数にだけ注意してください。詳細については説明しません。