機械学習:前処理 非数値データの扱い nominalデータ その2: LabelEncoderを使う
自分で辞書を作らずエンコードする方法には、機械学習の前処理機能のscikit_learnのLabelEncoderがあります。
前記事と同じデータフレームを使用して、
Colorのデータをエンコードするには、以下のコードとなります。
from sklearn.preprocessing import LabelEncoder
color_le=LabelEncoder()
df['Color']=color_le.fit_transform(df['Color'].values)
df.transpose()
前記事と同じ結果になったのは、LabelEncoderの中でも結局はアルファベット順に番号を振っているからです。
これを元に戻すには、fit_transformの代わりにinverse_transformを使います。
df['Color']=color_le.inverse_transform(df['Color'])
df.transpose()
機械学習のコードは数値しか受け付けないので、自作の辞書やこのLabelEncodingでNominalデータを数値化するのは必要な作業です。が、一方で、順序がないNominalデータに、アルファベット順とはいえ順序がついてしまっているのにお気づきでしょうか?
求めている機械学習の成果にもよりますが、これをこのまま機械学習コードに入れてしまった場合、
black < blue < green < red …
の関係性を持って解釈されて、正しく学習されない可能性があるのです。
これを防ぐone-hot Encodingの手法を次記事で使ってみましょう。
この記事が気に入ったらサポートをしてみませんか?