表形式データの DL
MLP と Entity Embedding でカテゴリ変数を扱う方法、表形式で DL が効く場面を学びます。
表形式では GBDT が基本#
まず前提として、表形式データでは 勾配ブースティング(GBDT) が依然として強力です。 DL を持ち出す前に、LightGBM 等のベースラインを固めるのが定石です。
それでも DL が活きる場面があります。
- 高カーディナリティのカテゴリが多い(Entity Embedding が効く)
- 画像/テキスト等と表データを同時に学習したい(マルチモーダル)
- アンサンブルの多様性を増やしたい(GBDT と相関の低いモデル)
Entity Embedding#
カテゴリ変数を One-Hot ではなく、**学習可能な密ベクトル(埋め込み)**で表現します。 カテゴリ間の関係を学習でき、高カーディナリティでも扱いやすくなります。
import torch.nn as nn
class TabularNet(nn.Module):
def __init__(self, n_categories, emb_dim, n_numeric):
super().__init__()
self.emb = nn.Embedding(n_categories, emb_dim) # カテゴリ → ベクトル
self.mlp = nn.Sequential(
nn.Linear(emb_dim + n_numeric, 128), nn.ReLU(), nn.Dropout(0.2),
nn.Linear(128, 1),
)
def forward(self, cat_idx, num):
x = torch.cat([self.emb(cat_idx), num], dim=1)
return self.mlp(x)数値特徴は 標準化 してから入力すると学習が安定します。
ヒント
表形式 DL は GBDT を「置き換える」より、アンサンブルの一員として価値が出ることが多いです。 GBDT と予測の相関が低ければ、混ぜてスコアが伸びます。
理解度チェック#
次のステップ#
次は画像コンペの基礎、CNN(畳み込み・プーリング)を学びます。