カテゴリカルデータのエンコーディング(One-hot、 Label encoding)
カテゴリカルデータ(カテゴリー変数)は、文字列やラベルとして表現されるデータです。多くの機械学習アルゴリズムでは、カテゴリカルデータを数値データに変換する必要があります。代表的なエンコーディング手法として、One-hotエンコーディングとLabelエンコーディングがあります。本記事では、これら2つのエンコーディング手法について解説し、Pythonを使った実装方法を紹介します。
カテゴリカルデータのエンコーディングとは
機械学習モデルでは、文字列データやラベルデータを直接扱うことができないため、数値データに変換する必要があります。エンコーディングは、カテゴリカルデータを数値に変換するプロセスです。以下の2つの手法がよく使用されます。
One-hotエンコーディング
One-hotエンコーディングは、カテゴリカルデータを0と1の二値で表現する手法です。各カテゴリを新しい列として作成し、該当する列を1に、それ以外の列を0に設定します。
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)
このコードでは、pandas
のget_dummies()
メソッドを使用してOne-hotエンコーディングを行っています。各カテゴリ(Red, Blue, Green)がそれぞれの列として表現され、該当する行のみ1が割り当てられます。
Labelエンコーディング
Labelエンコーディングは、カテゴリカルデータを整数に変換する手法です。各カテゴリに対してユニークな数値が割り当てられ、カテゴリが数値として表現されます。この方法はデータが順序を持つ場合や、単純なカテゴリの識別が必要な場合に有効です。
from sklearn.preprocessing import LabelEncoder
# Labelエンコーディング
label_encoder = LabelEncoder()
df['Color_Label'] = label_encoder.fit_transform(df['Color'])
print(df)
このコードでは、LabelEncoder
を使用してカテゴリカルデータを整数値に変換しています。各カテゴリ(Red, Blue, Green)にそれぞれユニークな数値が割り当てられています。
One-hotエンコーディングとLabelエンコーディングの違い
One-hotエンコーディングとLabelエンコーディングはどちらもカテゴリカルデータを数値に変換しますが、その使い方と適用するシーンが異なります。
One-hotエンコーディング | Labelエンコーディング |
---|---|
各カテゴリを新しい列として作成し、二値(0または1)で表現する | 各カテゴリにユニークな整数値を割り当てる |
カテゴリ間の順序がない場合に適用 | カテゴリ間に順序がある場合や、ラベルとして扱うときに適用 |
次元数が増える可能性がある | 次元数は変わらないが、データの数値化が簡略化される |
One-hotエンコーディングとLabelエンコーディングの使い分け
どちらのエンコーディングを使用するかは、データの特性やアルゴリズムに依存します。
- One-hotエンコーディングを使用する状況: カテゴリ間に順序がない場合や、距離ベースのアルゴリズム(例: K近傍法、SVMなど)を使用する場合に効果的です。しかし、カテゴリ数が増えると次元の呪い(次元の増加による問題)が発生する可能性があります。
- Labelエンコーディングを使用する状況: カテゴリに順序が存在する場合や、決定木やランダムフォレストのように順序を考慮しないアルゴリズムでは、Labelエンコーディングが適しています。
エンコーディング時の注意点
カテゴリカルデータをエンコーディングする際には、次の点に注意が必要です。
- One-hotエンコーディングの次元数: カテゴリの数が多い場合、One-hotエンコーディングによってデータの次元数が大きくなり、計算負荷が増加します。この場合、次元削減技術を検討する必要があります。
- Labelエンコーディングの数値の意味: Labelエンコーディングではカテゴリに数値を割り当てますが、アルゴリズムによってはこの数値に順序を仮定してしまうことがあります。無意味な順序付けが学習に悪影響を与えることがあるため、注意が必要です。
まとめ
カテゴリカルデータのエンコーディングは、機械学習において必須の前処理です。One-hotエンコーディングは、カテゴリに順序がない場合に使用され、各カテゴリを0と1で表現します。一方、Labelエンコーディングは、カテゴリにユニークな数値を割り当てる方法で、カテゴリ間に順序がある場合に有効です。データの特性に応じて適切なエンコーディング手法を選び、機械学習モデルの精度を高めましょう。