カテゴリカルデータのエンコーディング | データ前処理の重要性 | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

カテゴリカルデータのエンコーディング(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エンコーディングは順序のあるカテゴリや目的変数のラベルに使われます。データの性質や使用するモデルに応じて、適切な方法を選ぶことが重要です。