カテゴリカルデータのエンコーディング(One-hot、Label encoding)
カテゴリカルデータとは、数値ではなく文字列やラベルで表されるデータのことです。例えば、色、性別、地域、商品カテゴリなどが該当します。
多くの機械学習モデルでは、文字列のままではカテゴリカルデータを扱えないため、数値データに変換する必要があります。この変換処理をエンコーディングと呼びます。
この記事では、代表的なエンコーディング手法であるOne-hotエンコーディングとLabelエンコーディングについて解説します。
カテゴリカルデータのエンコーディングを図で理解する

カテゴリカルデータとは?
カテゴリカルデータは、数値の大小ではなく、種類や分類を表すデータです。
| データの例 | カテゴリ |
|---|---|
| 色 | 赤、青、緑 |
| 地域 | 東京、大阪、福岡 |
| サイズ | S、M、L |
| 商品カテゴリ | 食品、衣類、家電 |
このような文字列データは、そのままでは多くの機械学習モデルに入力できないため、数値へ変換します。
エンコーディングとは?
エンコーディングとは、カテゴリカルデータを機械学習モデルが扱える数値形式に変換する処理です。
代表的な方法には、次の2つがあります。
- One-hotエンコーディング
- Labelエンコーディング
One-hotエンコーディング
One-hotエンコーディングは、カテゴリごとに新しい列を作成し、該当するカテゴリを1、それ以外を0で表現する方法です。
| Color | Blue | Green | Red |
|---|---|---|---|
| Red | 0 | 0 | 1 |
| Blue | 1 | 0 | 0 |
| Green | 0 | 1 | 0 |
カテゴリ間に順序がない場合に適しています。例えば、赤・青・緑のように大小関係がないカテゴリでは、One-hotエンコーディングがよく使われます。
One-hotエンコーディングの実装
import pandas as pd
# サンプルデータの作成
data = {
'Color': ['Red', 'Blue', 'Green', 'Blue']
}
df = pd.DataFrame(data)
# One-hotエンコーディング
df_onehot = pd.get_dummies(df['Color'])
print(df_onehot)
get_dummies()を使うことで、カテゴリごとの列を自動的に作成できます。
Labelエンコーディング
Labelエンコーディングは、カテゴリごとに整数を割り当てる方法です。
| Color | Label |
|---|---|
| Blue | 0 |
| Green | 1 |
| Red | 2 |
Labelエンコーディングは、カテゴリに順序がある場合に向いています。例えば、サイズのS・M・Lのように順序関係があるデータでは利用しやすい方法です。
Labelエンコーディングの実装
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
df['Color_Label'] = label_encoder.fit_transform(df['Color'])
print(df)
LabelEncoderを使うことで、カテゴリを整数値へ変換できます。
One-hotエンコーディングとLabelエンコーディングの違い
| 項目 | One-hotエンコーディング | Labelエンコーディング |
|---|---|---|
| 変換方法 | カテゴリごとに列を作る | カテゴリごとに整数を割り当てる |
| 表現形式 | 0と1 | 0、1、2などの整数 |
| 向いているデータ | 順序のないカテゴリ | 順序のあるカテゴリ |
| 列数 | カテゴリ数に応じて増える | 列数は増えない |
| 注意点 | カテゴリが多いと列数が増える | 数値の大小を意味すると誤解される場合がある |
どちらを使うべきか
エンコーディング方法は、カテゴリに順序があるかどうかで選ぶのが基本です。
- 順序がないカテゴリ:One-hotエンコーディング
- 順序があるカテゴリ:Labelエンコーディング
- 目的変数のラベル:Labelエンコーディング
- カテゴリ数が非常に多い場合:別のエンコーディング方法も検討
例えば、「赤・青・緑」には大小関係がないためOne-hotエンコーディングが向いています。一方、「低・中・高」のようなデータには順序があるため、Labelエンコーディングを使うことがあります。
アルゴリズムによる使い分け
使用する機械学習アルゴリズムによっても、適したエンコーディングは変わります。
| アルゴリズム | 使いやすい方法 |
|---|---|
| 線形回帰 | One-hotエンコーディング |
| ロジスティック回帰 | One-hotエンコーディング |
| K近傍法 | One-hotエンコーディング |
| SVM | One-hotエンコーディング |
| 決定木 | Labelエンコーディングでも扱いやすい |
| ランダムフォレスト | Labelエンコーディングでも扱いやすい |
エンコーディング時の注意点
- One-hotエンコーディングはカテゴリ数が多いと列数が増える
- Labelエンコーディングは数値の大小関係をモデルが誤って学習する可能性がある
- 訓練データとテストデータで同じ変換ルールを使う
- 未知のカテゴリが出てきた場合の処理を考えておく
まとめ
カテゴリカルデータのエンコーディングは、文字列やラベルを機械学習モデルで扱える数値形式へ変換する重要な前処理です。
One-hotエンコーディングは順序のないカテゴリに適しており、Labelエンコーディングは順序のあるカテゴリや目的変数のラベルに使われます。データの性質や使用するモデルに応じて、適切な方法を選ぶことが重要です。