機械学習の分野でカテゴリ変数と呼ばれるものがある。これは数値自体には意味がない値のことを指す。次の例だと地域に数値を割り振られているが、これがカテゴリ変数のようだ。
地域 | 1 | 2 | 3 |
気温 | 6.7 | 3.4 | 18.6 |
※1: 東京, 2:大阪, 3:沖縄
このままでも機械学習の訓練データとしては問題ないが、学習がうまく行かないことがあるため、何らかの変換を行うのが一般的らしい。
ワンホットエンコーディング(One-hot Encoding)
カテゴリ変数の変換の一つにワンホットエンコーディング(One-hot Encoding)があり、これを適用した例が次になる
東京 | 1 | 0 | 0 |
大阪 | 0 | 1 | 0 |
沖縄 | 0 | 0 | 1 |
気温 | 6.7 | 3.4 | 18.6 |
Pythonでの実装例
import numpy as np
# Area 1:Tokyo, 2:Osaka, 3:Okinawa
data = {
'Area': [1, 2, 3],
'Temperature': [6.7, 3.4, 18.6]
}
areas = np.array(data.pop('Area'))
print(areas)
# [1 2 3]
data['Tokyo'] = (areas == 1) * 1.0
data['Osaka'] = (areas == 2) * 1.0
data['Okinawa'] = (areas == 3) * 1.0
print(data)
# {'Temperature': [6.7, 3.4, 18.6], 'Tokyo': array([1., 0., 0.]), 'Osaka': array([0., 1., 0.]), 'Okinawa': array([0., 0., 1.])}
カテゴリ変数のエンコーディング方法はいくつかあるらしい。
- One-hot Encoding
- Hash Encoding
- Target Encoding
分析対象によって適切なエンコーディングは変わってくるので、どのような違いが出てくるかの例は、次のリンクを参考になる。
https://www.renom.jp/ja/notebooks/tutorial/preprocessing/category_encoding/notebook.html
豆知識
ワンホットエンコーディングのワンホットは、一つだけがHigh、それ以外がLowであるようなビット列を指す用語が来ているのかもしれない(https://ja.wikipedia.org/wiki/One-hot)。
コメント