徒然草子

徒然なるがままに書いていく

カテゴリ変数の特徴量をラベリングする方法

クラスラベルを上手いことまとめる方法たち

名義特徴量などクラスラベルを整数値としてエンコードするために使用する。
scikit-learnのLabelEncoderを使用すれば簡単にラベルをエンコードしてくれる。

enumerateを使う

samples = ['Adam','Balgo','Clouse']
list(enumerate(samples))
# [(0,'Adam'),(1,'Balgo'),(2,'Clouse')]

docs.python.org

LabelEncoderを使う

from sklearn.preprocessing import LableEncoder
le = LabelEncoder()
d = le.fit_transform(sample)
d
# array([0, 1, 2], dtype=int64)

※ちなみに変換したラベルを元の文字列に戻す際は、inverse_transformメソッドを使ってあげる。

OneHotEncoderを使う

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ohe = OneHotEncoder()
ct = ColumnTransformer([("categorical", ohe, [0]),
                        ("numeric", "passthrough", [1,2])])
result = ct.fit_transform(X)
result

ある特徴量のみにOHEをかける場合は上記のように使用する。
ただ、特徴量の相関性が高いと多重共線性の問題が発生するケースもあるため、特徴量の列を削除して 簡単に判別できるように調整する必要がある。

参考文献