機械学習:前処理 非数値データの扱い

機械学習に使うデータセットが、構成データの全てが数値だとは限りません。この非数値データをカテゴリーデータを呼び、例えば、大中小のサイズのように順序がつくordinal data、そして順序のつかない色、赤、青、黄色のようなnominal dataの二つがあります。
 この非数値データを特徴料として機械学習を行う場合、これらのデータをエンコードする必要があります。

 順次特徴量は比較的簡単で、pythonの辞書機能を使います。
サンプルデータは以下の通り、サイズとし、
XP<P<S<M<L<XL<2XL
 の順序関係があるとします。

import pandas as pd

df = pd.DataFrame({
    'Size':['S', 'M', 'L', 'S', 'M', 'P', 'M', 'L', 'XP', '2XL', 'XL']
})
df.transpose()
df


 サイズの順序関係を明記して、数値化する辞書を定義し、辞書機能を使って数値化します。

size_mapping = {'XP':0, 'P':1, 'S':2, 'M':3, 'L':4, 'XL':5, '2XL':6}
df['Size']=df['Size'].map(size_mapping)
df.transpose()

 出力はこうなります。

ordinal data encoding

元に戻すには、size_mappingの逆関数を定義し、再度マップしましょう。

inv_size_mapping={v:k for k,v in size_mapping.items()}
df['Size']=df['Size'].map(inv_size_mapping)
df.transpose()


この記事が気に入ったらサポートをしてみませんか?