機械学習 カテゴリ変数の変換

機械学習

機械学習の分野でカテゴリ変数と呼ばれるものがある。これは数値自体には意味がない値のことを指す。次の例だと地域に数値を割り振られているが、これがカテゴリ変数のようだ。

地域123
気温6.73.418.6

※1: 東京, 2:大阪, 3:沖縄

このままでも機械学習の訓練データとしては問題ないが、学習がうまく行かないことがあるため、何らかの変換を行うのが一般的らしい。

ワンホットエンコーディング(One-hot Encoding)

カテゴリ変数の変換の一つにワンホットエンコーディング(One-hot Encoding)があり、これを適用した例が次になる

東京100
大阪010
沖縄001
気温6.73.418.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

分析対象によって適切なエンコーディングは変わってくるので、どのような違いが出てくるかの例は、次のリンクを参考になる。

403 Forbidden

豆知識

ワンホットエンコーディングのワンホットは、一つだけがHigh、それ以外がLowであるようなビット列を指す用語が来ているのかもしれない(https://ja.wikipedia.org/wiki/One-hot)。

コメント