カテゴリ変数のエンコーディング
ラベルエンコーディング、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 baselinesklearn 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 外れ値の検出と除去
- カテゴリ変数のエンコーディング
- 特徴量スケーリング:正規化と標準化
- 前処理パイプラインの構築