概要
sklearn.preprocessing
のLabelEncoder
は、クラスデータ(カテゴリーデータ)を数値ラベルに変換する。
- コンストラクターは引数をとらない
fit()
メソッドに特徴量を要素とする1次元配列(特徴量数)の元データを与える- 特徴量のクラス数がn_classのとき、特徴量データが0~n_class−1の整数ラベルに変換される
- 特徴量が定量的な数値データであっても整数ラベルに変換される
使い方
LabelEncoder
を使うには、まずそのインスタンスを生成し、fit()
メソッドで数値ラベルを生成する。fit()
メソッドを実行すると、元データのクラスの重複を除いたクラスリストがclasses_
プロパティーに保存され、transform()
メソッドで任意のデータを変換する変換器が準備される。
1 2 3 4 5 6 7 |
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() le.fit(["Japan", "US", "Germany", "Japan", "US"]) print(le.classes_) # ['Germany' 'Japan' 'US'] |
準備された変換器で、変換したいデータにtransform()
メソッドを適用して、変換された数値ラベルを得る。
1 2 3 4 5 |
y = ["Germany", "US", "US", "Japan"] y_trans = le.transform(y) print(y_trans) # [0 2 2 1] |
このラベルデータにinverse_transform()を適用すると、数値ラベルが元のクラスデータに逆変換される。
1 2 3 |
print(le.inverse_transform(y_trans)) # ['Germany' 'US' 'US' 'Japan'] |
transform()
の引数に元データに存在しないクラスデータが含まれていた場合、エラーとなる。
1 2 3 |
print(le.transform("Germany", "China")) # TypeError: transform() takes 2 positional arguments but 3 were given |
注意
LabelEncoder
は、元データに定量的な数値データを与えた場合でもこれらを数値ラベルに変換する。
1 2 3 4 5 6 7 |
le.fit([-0.5, 0, 0.3, 0.7, 1.2, 1.5]) y_trans = le.transform([-0.5, 0.7, 1.2]) print(y_trans) print(le.inverse_transform(y_trans)) # [0 3 4] # [-0.5 0.7 1.2] |
transform()
の引数に元データに存在しない数値が含まれている場合はエラーとなる。