スポンサーリンク

【scikit-learn】カテゴリ変数を数値化するsklearn.preprocessing.LabelEncoder【ラベルエンコーディング】

Machine Learning

Pythonでカテゴリ変数を数値化するには、scikit-learnライブラリのsklearn.preprocessing.LabelEncoderを用いる。

sklearn.preprocessing.LabelEncoderの使い方

sklearn.preprocessing.LabelEncoderを用いると、カテゴリ変数を0~n_class-1の値に変換することができる。
基本的な使い方は、fit()に変換したいカテゴリ変数を指定することで、カテゴリ変数と数値を適合させる。以下の場合、’amsterdam’ =0、’paris’=1 ‘tokyo’=2になる。classes_をみることで数値の順番が確認できる。fit()実行後に、transform()に変換したいカテゴリ変数を指定することで数値に変換される。
fit_transform()は、fit()transform()を同時に実行する。

from sklearn.preprocessing import LabelEncoder

category_label = ["paris", "paris", "tokyo", "amsterdam"]

le = LabelEncoder()
le.fit(category_label)
print(le.classes_)
# ['amsterdam' 'paris' 'tokyo']
print(le.transform(category_label))
# [1 1 2 0]

print(le.fit_transform(category_label))
# [1 1 2 0]

pandas Dataframeの列を置換する方法

pandas Dataframeの列におけるカテゴリ変数をラベルエンコードしたい場合は、以下のように書く。

import pandas as pd

d = {'city': ["paris", "paris", "tokyo", "amsterdam"], 'id': [3, 4, 0, 1]}
df = pd.DataFrame(data=d)
print(df)
#         city  id
# 0      paris   3
# 1      paris   4
# 2      tokyo   0
# 3  amsterdam   1

encoded = le.fit_transform(df['city'])
df['city'] = encoded
print(df)
#    city  id
# 0     1   3
# 1     1   4
# 2     2   0
# 3     0   1

関連記事、参考資料

コメント