0Pricing
Learn AI with Python · レッスン

カテゴリ変数のエンコーディング

ラベルエンコーディング、one-hot エンコーディング、順序エンコーディング、pd.get_dummies() と sklearn OrdinalEncoder の違いを学びます。

「カテゴリ変数のエンコーディング」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

カテゴリをエンコードする理由

ほとんどの機械学習モデルは、「red」や「small」のようなテキストラベルではなく、数値を必要とします。エンコーディングは、意味を保ったままカテゴリ変数を数値形式に変換します。

順序カテゴリと名義カテゴリ

順序カテゴリには自然な順序があります(small < medium < large)。一方、名義カテゴリには順序がありません(red、green、blue)。適切なエンコーディングは、どちらの種類かによって異なります。

順序カテゴリのラベルエンコーディング

LabelEncoderは各カテゴリを整数に対応付けます。整数の順序に意味がある順序データに適しています。

from sklearn.preprocessing import LabelEncoder
sizes = ["small", "large", "medium", "small"]
le = LabelEncoder()
print(le.fit_transform(sizes))   # integers (alphabetical by default)

名義カテゴリに使う危険性

名義カテゴリにラベルエンコーディングを適用するのは危険です。モデルがred=0、green=1、blue=2を、greenがredとblueの「間」にあると解釈し、誤った順序を作り出す可能性があります。代わりにワンホットエンコーディングを使用してください。

get_dummiesでワンホットエンコーディングする

pd.get_dummiesはカテゴリごとに1つのバイナリ列を作成します。各行ではちょうど1列が1になり、暗黙の順序がないため、名義変数に適しています。

import pandas as pd
df = pd.DataFrame({"color": ["red", "green", "blue", "red"]})
print(pd.get_dummies(df, columns=["color"]))

ダミー変数の罠

k個のカテゴリからk列を作ると、それらは完全な多重共線性を持ちます(常に合計が1になるためです)。このダミー変数の罠は線形モデルの問題になります。1列削除して解消してください。

drop_first

drop_first=Trueは1つのカテゴリを削除し、k-1列を残します。削除されたカテゴリは暗黙の基準(すべて0)になり、多重共線性が解消されます。

print(pd.get_dummies(df, columns=["color"], drop_first=True))
# one fewer column; the dropped color is the baseline

sklearn OrdinalEncoder

パイプラインでは、OrdinalEncoderはFEATURESのラベルエンコーディングに相当するsklearnの機能で、カテゴリの順序を明示的に指定できます。

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories=[["small", "medium", "large"]])
print(enc.fit_transform([["medium"], ["large"], ["small"]]))

sklearn OneHotEncoder

OneHotEncoderはパイプラインで使いやすいワンホットエンコーディングのツールです。トレーニングデータからカテゴリを学習し、新しいデータにも同じ対応付けを適用するため、本番環境で重要です。

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"], ["green"], ["blue"]]))

未知のカテゴリへの対応

テストデータに、トレーニング時に一度も見ていないカテゴリが含まれることがあります。handle_unknown="ignore"を設定すると、OneHotEncoderはエラーを起こさず、すべて0の出力を返します。

ohe = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
ohe.fit([["red"], ["green"]])
print(ohe.transform([["blue"]]))   # all zeros, no error

カーディナリティの高い列

一意な値が数千個ある列をワンホットエンコーディングすると、特徴量の数が爆発的に増加します。カーディナリティが高い場合は、ターゲットエンコーディング、ハッシング、または出現頻度の低いカテゴリを「other」にまとめる方法を検討してください。

理解度チェック

エンコーディングに関する知識を確認しましょう。

まとめ

エンコーディングのツールキット:

  • 順序データ -> 整数エンコーディング(LabelEncoder / OrdinalEncoder)
  • 名義データ -> ワンホット(pd.get_dummies / OneHotEncoder)
  • drop_first=Trueでダミー変数の罠を回避します
  • 未知のテストカテゴリにはhandle_unknown="ignore"を使用します
  • カーディナリティの高い列による特徴量数の爆発に注意してください

よくある質問

「カテゴリ変数のエンコーディング」レッスンは無料ですか?

はい。「カテゴリ変数のエンコーディング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「カテゴリ変数のエンコーディング」で何を学びますか?

ラベルエンコーディング、one-hot エンコーディング、順序エンコーディング、pd.get_dummies() と sklearn OrdinalEncoder の違いを学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「カテゴリ変数のエンコーディング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 外れ値の検出と除去
  2. カテゴリ変数のエンコーディング
  3. 特徴量スケーリング:正規化と標準化
  4. 前処理パイプラインの構築
← Learn AI with Pythonに戻る