🐵
LabelEncoding と OneHotEncoding どっちがいい?
要約
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