🐵

LabelEncoding と OneHotEncoding どっちがいい?

2024/03/31に公開

要約

Label encoding と one-hot encodingはカテゴリーデータを数値データに変換する手法です。
Label encodingは、大量の異なるカテゴリー変数や、固有の順序を持つカテゴリーに最適。
one-hot encodingは、少量のカテゴリー変数や、順序のないカテゴリーに最適です。

Label encodingとOne-hot encoding どっちがいいの?

単純にどちらがよいということはない。その時々に応じて使い分けるのがよいようです。

Label endcodingの方がよい場合

  • カテゴリーデータの種類がいっぱいある場合
  • カテゴリーデータが特定の順番を持つ場合
  • 決定木やランダムフォレストを使う場合

One-hot encodinの方がよい場合

  • 比較的データの種類が少ない場合(Label encodingよりデータを使うため)
  • カテゴリーデータに特定の順番がない場合
  • 次元削減と組み合わせた機械学習モデルを使う場合

実際の方法

マッシュルームのデータを使って、説明します。

mashroom = pd.read_csv("http://logopt.com/data/mashroom.csv")
for feature in mashroom.columns:
    print(f"{feature}\n{mashroom[feature].nunique()}")
    print("==============")

このうち、"shape"を実際にエンコーディングしてみます。

Label encoding

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
encoded_data = le.fit_transform(mashroom["shape"])
print(pd.concat([mashroom,pd.Series(encoded_data)],axis=1))
print(encoded_data)

One-hot encoding

shape_dummies = pd.get_dummies(mashroom["shape"])
pd.concat([mashroom,shape_dummies],axis=1)

コードはOne-hot encodingの方が簡単!

Discussion