🦦

one-hot表現とは

2023/07/24に公開

今回はone-hot表現について解説します。

one-hot表現とは

まず例を示します。

# 通常表現
1
2
5
10
# one-hot表現
[1,0,0,0]
[0,1,0,0]
[0,0,1,0]
[0,0,0,1]

このように、カテゴリをリスト化したものがone-hot表現になります。
one-hotという名前は、リストの一要素のみが1(hot)となっていることに由来します。

勘違いしがちですが、数字はそれぞれのインデックスに対応する必要はなく、それぞれが個別に分類できれば問題ありません。
そのためカテゴリの数だけ、リストの数が必要になります。

one-hot表現の目的は、
1.カテゴリの名称に意味を生じさせない
2.カテゴリを数値化する
ことです。
それぞれについて説明します。

1.カテゴリの名称に意味を生じさせない

例えば、手描き文字の判別の際に、正解データが[2,1,3]の画像があるとします。
※手書きで2,1,3と書かれた画像データ

この時、正解データの数字の大きさは意味がありません。(ただの分類であるため)
しかし、機械学習アルゴリズムはこの数字を意味のあるものとして扱ってしまう可能性があるので、これを防ぐためにone-hot表現が使用されます。

大げさな例ですが、通常表現の場合、機械学習モデルの中で、
正解が3のデータが、正解が1のデータに対して3倍価値があるものとして扱われるかもしれません。
このような過ちを防ぐために、one-hot表現が使用されます。

2.数字以外のカテゴリを数値化する

最初は数字にしましたが、カテゴリは何でも良いです。
例えば

# 通常表現
犬
猫
ゴリラ
# one-hot表現
[1,0,0]
[0,1,0]
[0,0,1]

これにより、文字などのカテゴリも数値としてコンピューター上で扱えるようになります。

まとめ

one-hot表現は機械学習において、
1.カテゴリの名称に意味を生じさせないこと
2.カテゴリを数値化し、コンピューター上で扱えるようにすること
を目的として使用される表現方法です。

それでは今回はここまでです。読んで頂きありがとうございました!



おまけ
補足です。興味のある方は見てみて下さい。

- ニューラルネットにおける文脈
強化学習における3×4のマップをエージェントが探索する場合、マップの状態は12個存在するので、次のようなデータが必要になります。

one_hot_list = [
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
]

ニューラルネットワークを使用する場合、このようにデータをまとめて「バッチ」として処理します。
これは(12,12)のバッチ(バッチサイズ、状態の特徴量)となります。
例えばこれを半分ずつ処理する場合、(6,12)のバッチで2回処理を行うことになります。
--

Discussion