はじめに
機械学習では、文字列や色といった「そのままでは数値処理できないデータ」を扱わなければいけない場面があることも多いでしょう。例えば「東京」「大阪」「福岡」などの都市名や「赤」「青」「緑」といった色を表すデータです。
こうしたデータを数値に変換する代表的な方法が以下の2つ。
- ラベルエンコーディング(Label Encoding)
- one-hotエンコーディング(One-Hot Encoding)
この記事では、それぞれの特徴や違い、どう使い分ければいいのかを初心者向けにわかりやすく解説します。
ラベルエンコーディングとは?
簡単に説明すると、カテゴリごとに整数ラベルを割り当てる方法です。
色に対してラベルエンコーディングを行った例は以下の通りです。
from sklearn.preprocessing import LabelEncoder
colors = ['赤', '青', '緑', '赤', '青']
le = LabelEncoder()
encoded = le.fit_transform(colors)
print(encoded) # [0 1 2 0 1]
メリット
- データの次元が増えない
- 実装がシンプルで簡単
デメリット
- モデルが順序関係があると誤解する可能性がある
one-hotエンコーディングとは?
簡単に説明すると、ダミー変数を用いたエンコーディング方法です。
色に対してone-hotエンコーディングを行った例は以下の通りです。
import pandas as pd
colors = ['赤', '青', '緑', '赤', '青']
df = pd.DataFrame({'color': colors})
one_hot = pd.get_dummies(df, columns=['color'])
print(one_hot)
メリット
- 数値的な順序を持たないため、モデルが誤解しにくい
デメリット
- カテゴリが多いと次元(列数)が爆発的に増える
どう使い分ければいいのか
原則の使い分け
カテゴリに順序があるかどうかで使い分けるのが基本です。
条件 | 適した手法 |
---|---|
カテゴリに意味のある順序がある | ラベルエンコーディング |
カテゴリに順序がない | One-Hotエンコーディング |
具体例
「評価(低・中・高)」のように意味のある順序 → ラベルエンコーディング
「色(赤・青・緑)」のように順序がない → one-hotエンコーディング
モデルごとの相性
モデルによって、どちらのエンコーディングが適しているかが異なります。
モデル | 推奨される手法 | 補足 |
---|---|---|
決定木 / ランダムフォレスト | ラベルでもOK | 木構造は順序を誤解しにくい |
線形回帰 / ロジスティック回帰 | One-Hot推奨 | 数値の大小が意味を持ってしまうため注意 |
ニューラルネットワーク | One-HotまたはEmbedding | カテゴリ数やデータ量に応じて選択 |
まとめ
カテゴリデータを前処理するときは、以下の2点を意識すると良いでしょう!
- このカテゴリに順序はあるのか?
- どのモデルを使う予定か?
この2点を押さえることで、モデルの精度や学習効率を大きく左右する前処理を、より適切に行うことができます。
この記事が、エンコーディング手法の選択に迷ったときの参考になれば嬉しいです!