One-hot ベクトルとは、$(0,1,0,0,0,0)$ のように、1つの成分が1で残りの成分が全て0であるようなベクトルのことです。
このページでは、One-hotベクトルについて、具体例やメリット・デメリットを整理します。One-hotベクトルを使って表すことを、One-hot表現、ワンホット表現、One of K encoding などとも言います。
One-hot表現の例
しかし、例えば「犬、猫、ウサギ」などの数字でない値を取る説明変数を扱いたい場合もあります(※1)。
そこで、例えば、
犬→1、猫→2、ウサギ→3
のように数字に変換する方法が考えられます(※2)。
しかし、このように変換すると、(例えば線形回帰などで分析を行う際に)猫はウサギと犬の中間などと解釈されてしまい、おかしな分析結果になってしまう場合があります。
そこで、
犬→$(1,0,0)$、猫→$(0,1,0)$、ウサギ→$(0,0,1)$
のように、それぞれを3次元のOne-hotベクトルで表現する方法(One-hot表現、ワンホット表現、One of K encoding などと言います)があります。
One-hot表現のメリットは、変数の全ての値を平等に扱えることです。
One-hot表現の例2(自然言語処理)
例えば「今日は暑い」「暑い夏は嫌い」という2つの文書があるとき、それぞれを以下のようにOne-hotベクトルの系列で表現することができます。
今日:$(1,0,0,0,0)$
は:$(0,1,0,0,0)$
暑い:$(0,0,1,0,0)$
暑い:$(0,0,1,0,0)$
夏:$(0,0,0,1,0)$
は:$(0,1,0,0,0)$
嫌い:$(0,0,0,0,1)$
・1つの単語に1つのOne-hotベクトルが対応
・One-hotベクトルの次元は、単語の総種類数
上記のような One-hot表現では、1つの文書は One-hotベクトルの系列に対応します。よって、RNN などの系列データを入力とする深層学習モデルに入力することができます。
One-hot表現のデメリット
例えば、自然言語処理の例で、単語の種類が1万個ある場合、One-hotベクトルは1万次元になります(※2)。
変数の数が多くなり過ぎると、分析手法によっては、計算に非常に時間がかかったり、そもそもまともな分析ができなかったりします。このような場合には、低次元のベクトルで表現する必要があるかもしれません。
補足
※1「数字でない値を取る変数」と言うよりも、名義尺度と言った方が正確です。名義尺度、順序尺度、間隔尺度、比率尺度
※2 犬→1、猫→2、ウサギ→3 のように単純に番号付けする方法を Label encoding と言います。名義尺度を数値化する方法としては、Label encoding や One-hot encoding の他にも Target encoding などがあります。
次回は ミンコフスキー距離の意味と、関連する距離の性質 を解説します。