One-hotベクトル(ワンホット表現)の意味とメリット・デメリット

最終更新日 2019/06/15

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(自然言語処理)

自然言語処理において、文書内の単語を One-hotベクトルで表すことがあります。

例えば「今日は暑い」「暑い夏は嫌い」という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表現のデメリット

One-hot表現には、変数の数が多くなるというデメリットがあります。

例えば、自然言語処理の例で、単語の種類が1万個ある場合、One-hotベクトルは1万次元になります(※2)。

変数の数が多くなり過ぎると、分析手法によっては、計算に非常に時間がかかったり、そもそもまともな分析ができなかったりします。このような場合には、低次元のベクトルで表現する必要があるかもしれません。

補足

※1「数字でない値を取る変数」と言うよりも、名義尺度と言った方が正確です。名義尺度、順序尺度、間隔尺度、比率尺度

※2 犬→1、猫→2、ウサギ→3 のように単純に番号付けする方法を Label encoding と言います。名義尺度を数値化する方法としては、Label encoding や One-hot encoding の他にも Target encoding などがあります。

次回は ミンコフスキー距離の意味と、関連する距離の性質 を解説します。

ページ上部へ戻る