1 one-hot表現の概要
one-hot表現は、有限個のカテゴリのうち「対象となる1カテゴリのみを選択している」という情報を、長さNのベクトルで表す符号化方法である。具体的には、選ばれたカテゴリに対応する位置の要素だけを1とし、残りの要素を0とする。離散的なラベルや語彙要素などを機械学習の入力・教師データとして扱う際に、素直で実装しやすい形として用いられる。
直感的な利点として、各次元が「どのカテゴリか」を直接示すため、モデルやデータの挙動を追跡しやすい点がある。一方、カテゴリ数Nが大きい場合、ほとんどの要素が0になるため、計算量やメモリ消費の面で不利になりやすい。このため実務では、疎表現の扱い、埋め込み表現への置換、前処理やデータ設計の工夫といった周辺要素が重要となる。
1.1 定義と基本アイデア
one-hot表現は「カテゴリ集合の要素を、ベクトルの成分のうち1つだけ有効化することで表す」という発想に基づく。カテゴリがN種類あるとき、表現は長さNのベクトルで、カテゴリiに対応する成分だけを1、他を0にする。
この符号化の基本は、カテゴリ間の関係を数値的な距離として埋め込むのではなく、「選択の事実」を明示することにある。そのため、カテゴリの順序や連続性が本来ない場合でも破綻しにくいが、カテゴリ間の類似性が暗黙に表れない点は注意を要する。
1.2 数学的な定式化
one-hot表現は線形代数の枠組みで書き下せる。カテゴリ集合のサイズをNとし、カテゴリ番号を0からN−1のように区別できるものとする。符号化されたベクトルは、標準基底ベクトルのいずれかに一致する。
1.2.1 ベクトルとしての表現
カテゴリiに対応するone-hotベクトルをxとすると、xはN次元であり、成分x_j(j=0,…,N−1)は次を満たす。
- x_i = 1
- x_j = 0(j≠i)
このため、one-hot表現は標準基底ベクトルe_i(i番目の成分だけが1のベクトル)と同一視できる。
2.2.2 2進的(位置ベース)な符号化の見方
one-hot表現はしばしば「2進的な見方」もできる。すなわち、ベクトルの各成分をビットのように扱うと、状態は「ちょうど1つのビットが立っている」形になる。この意味で、N種類の状態をNビットで表すが、立ち方が一意に決まるため、区別のための符号として機能する。
ただし、ビット列としての数値順序がカテゴリ間の関係を表すわけではない。あくまで位置(どの成分が立っているか)がカテゴリを意味する、位置ベースの符号化である点がポイントになる。
1.3 用語(カテゴリ・次元・クラス番号)
- カテゴリ
離散的に区別される対象(例:ラベル、単語、記号、属性値)の種類。
- 次元
one-hotベクトルの成分数に対応する軸の数。カテゴリ数Nに等しくなる。
- クラス番号
各カテゴリに割り当てられた識別番号。符号化の際に、どの成分を1にするかを決める基準となる。
2 one-hot表現の作り方
one-hot表現は手順が単純である。まず、カテゴリを番号付けし、その番号に対応する成分を1にするベクトルを作る。計算機では、長さNの配列(ベクトル)を用意し、初期化してから該当位置だけを更新する形が一般的である。
ただし実装上は、番号の付け方(始まり)や、データ前処理(欠損・未知カテゴリ)などの設計が重要になる。
2.1 入力(カテゴリ)からの変換手順
カテゴリからone-hotベクトルを得るには、「カテゴリ→クラス番号→ベクトル」という変換の流れを踏むのが基本である。クラス番号は辞書やラベル一覧から決める。
2.1.1 クラス番号の割り当て
クラス番号の割り当ては、カテゴリの集合をインデックス化する作業である。代表的には、語彙リストやラベル集合を読み込み、順序を決めて各カテゴリに0からN−1のような整数を対応させる。
重要なのは、訓練データと推論時に同じ対応表を用いることである。別の割当をしてしまうと、同じカテゴリを意味するはずのone-hotが別の位置に1を置くことになり、モデルの理解が崩れる。
2.1.1.1 ゼロ始まり・一始まりなどの実装上の注意
クラス番号は0始まりで扱うのが一般的だが、現場の都合で1始まりの表記を使うこともある。その場合、ベクトル成分への割当時にオフセットを調整しないと、1が置かれる位置がずれてしまう。
また、実装言語やライブラリによって添字の扱いが異なる可能性があるため、テストケース(簡単な入力で正しい成分が1になっているか)で検証することが推奨される。
2.1.2 ベクトルの生成
ベクトル生成は、長さNの配列を0で初期化し、クラス番号iに対応する要素を1に設定する操作である。擬似的には次の処理になる。
- 出力長Nのベクトルを用意する
- 全要素を0にする
- index i の要素を1にする
この段階で、dtype(数値型)や計算デバイス(CPU/GPU)との整合も決める。学習用途では浮動小数型にしておくと、その後の演算と相性がよいことが多い。
2.2 例題による具体化
具体例を通して、どの成分が1になるかを確認することが理解の近道になる。カテゴリ数が小さいと、ベクトルの中身を手で追えるため効果的である。
2.2.1 3クラスの場合
カテゴリが3種類(A,B,C)で、クラス番号をA=0, B=1, C=2とする。たとえばカテゴリBを選んだ場合のone-hotベクトルは長さ3であり、次のようになる。
- A: (1, 0, 0)
- B: (0, 1, 0)
- C: (0, 0, 1)
ここでは「Bの情報」が2番目の成分(添字1)に集約される。
2.2.2 10クラスの場合
カテゴリ数が10で、選択されたカテゴリがクラス番号kだとする。するとone-hotベクトルは長さ10で、k番目の要素だけが1になる。
例えばk=7の場合、ベクトルは次の形で表される。 (0, 0, 0, 0, 0, 0, 0, 1, 0, 0)
この例は、カテゴリ数が増えても基本原理は変わらず、「立つ位置がカテゴリを表す」ことを示している。
2.3 スパース性とデータ構造
one-hot表現は多くの場合、密なベクトル(全成分を明示)として保持するのではなく、疎な形式で扱うと効率が良い。理由は、要素の大部分が0であり、情報量として有効なのは1箇所(または少数箇所)に限られるためである。
2.3.1 疎ベクトルの考え方
疎ベクトルとは、多くの成分が0であるベクトルを、0でない成分だけを記録して表す考え方である。one-hotでは非ゼロ成分が最大で1つ(単一ラベルの場合)なので、記録すべき情報は「どの位置に1があるか」だけになる。
そのため、メモリ使用量の削減や転送コストの低減が見込める。さらに、計算でも「非ゼロの位置だけに対して演算する」設計が可能になる。
2.3.2 計算機上の格納形式
計算機では、疎表現としてインデックスと値のペア、あるいは圧縮形式が使われることがある。one-hotのように非ゼロ要素が極端に少ないケースでは、そもそもベクトルを作らず「クラス番号そのもの」だけを保持し、必要なときに対応する処理へ渡す設計も採用される。
ライブラリによっては、分類損失(例:クロスエントロピー)などがクラス番号形式を直接扱えるため、one-hotを明示的に展開しない経路を取ることで効率を高められることがある。
3 応用分野と利用目的
one-hot表現は、離散カテゴリを数値入力として機械に提示するための基礎的手段として広く利用される。特に、カテゴリ間の明確なラベル区別が必要な場面で使われやすい。用途は大きく、学習の教師信号、言語データの語彙表現、データ前処理における特徴量化などに分かれる。
3.1 機械学習におけるラベル表現
機械学習では、分類モデルの教師データとしてラベルを扱う必要がある。one-hotはそのための標準的な符号化の一つであり、モデルが出力する確率分布やスコアに対して整合的に比較できる形を提供する。
3.1.1 分類問題での教師データ
分類問題では、各入力に対して正解カテゴリが1つ対応することが多い。このとき、教師ラベルをone-hotベクトルに変換すると、カテゴリごとの正解状態が成分として表現される。
たとえば入力の正解がクラスiであれば、教師信号はe_iに対応するベクトルになる。学習時にモデル出力との比較が行われ、パラメータが更新される。
3.1.2 損失関数との関係(概念整理)
損失関数は、モデルが出した予測と、教師信号とのずれを数値化する役割を担う。one-hotは「正解カテゴリの位置がどこか」を明確にするため、損失計算で参照されやすい形式になる。
実務では、one-hotを明示的に作らずとも同等の目的を達成できる場合がある。たとえば損失関数側がクラス番号(正解のインデックス)を受け取れる設計になっていることがあり、この場合は余計な展開を避けられる。
3.2 自然言語処理での単語・記号の表現
自然言語処理では、単語や記号などの離散要素を数値へ変換する必要がある。one-hotは語彙サイズに応じて次元が決まるため、語彙が大きいとベクトルも高次元になりやすいが、概念的には分かりやすい代表例となる。
3.2.1 語彙サイズと次元数
単語集合を語彙とし、語彙の総数をVとすると、各単語は長さVのone-hotで表せる。したがって、語彙が増えるほど次元数も増大する。
この性質は、モデルの入力が高次元になること、計算とメモリの負荷が増えることにつながる。一方で、語彙内での出現箇所を直接識別できるため、未知語処理などを含めたデータ設計と組み合わせて使われることもある。
3.2.2 誤り解析における解釈
one-hotは、どの語彙項目が入力されたかを成分レベルで追跡しやすい。そのため、モデルが参照している入力が想定通りか、データ前処理の段階で単語IDが正しく対応しているか、といった点検に役立つ。
また、誤分類の原因を調べる際に、特定の語彙が一貫して誤りに寄与しているかを観察する手がかりにもなりうる。ただし、one-hotそのものが意味の類似性を表すわけではないため、解釈は限定的になる。
3.3 仕様書・データ前処理での活用
機械学習を実行する前のデータ整形では、カテゴリ型の特徴量を数値化して扱える形にする必要がある。one-hotはその目的に合致しており、仕様書や前処理手順として説明されることが多い。
3.3.1 カテゴリ型特徴量の符号化
たとえば顧客属性、製品カテゴリ、タグ、地域区分などの「値がカテゴリとして扱われる項目」を数値入力にする際に使われる。カテゴリごとに列を用意し、該当するものだけを1として表すことで、線形モデルや一般的な機械学習パイプラインに渡しやすくなる。
特徴量としてone-hotが作られた場合、モデルはカテゴリの存在有無を重み付きで利用することができる。ただしカテゴリ間の連続性は自動的には作られないため、追加の工夫が必要になることもある。
3.3.2 欠損や未知カテゴリへの対応
データには欠損値が含まれる場合がある。また、訓練時に見ていないカテゴリが推論時に現れることもある。これらはone-hot化の前に方針を決める必要がある。
一般的な方策として、欠損専用カテゴリや未知カテゴリ専用の位置を用意して割り当てることがある。これにより、入力パイプラインが破綻しにくくなり、整合性を保ちながら処理できる。
4 限界と代替手法
one-hot表現は扱いやすい一方、万能ではない。カテゴリ数が増えるにつれて次元が膨張し、計算・記憶面で不利になりやすい。さらに、カテゴリ間の意味的な近さを表せないため、モデルが有用な一般化を得るには追加の学習が必要になることがある。
4.1 次元の呪い(スケーリング課題)
カテゴリ数Nが大きいと、one-hotベクトルは高次元になる。高次元では、データ点の空間が広がり、学習が難しくなったり、不要な計算が増えたりしやすい。このようなスケーリングの問題は、実務上「次元の呪い」として言及されることがある。
特に、訓練データが少ないのにカテゴリが多い場合、各カテゴリに十分な観測がないため、過学習や学習の不安定化が起きやすくなる。さらに、疎表現を使っても、実際の演算経路が密になってしまうとコスト削減が限定される場合がある。
4.2 再表現の必要性(埋め込みへの移行)
one-hotの大きな弱点は、カテゴリ間の類似性を表現に埋め込めない点にある。そこで、カテゴリを連続ベクトルへ写像し、意味的な近さを学習によって獲得する枠組みとして埋め込み表現が用いられることが多い。
埋め込みへ移行することで、次元を抑えつつ、関連するカテゴリが近い位置に配置されるように学習できる可能性がある。
4.2.1 埋め込み表現の基本概念
埋め込み表現は、カテゴリを低次元の実数ベクトルとして表す方法である。各カテゴリに対して学習可能なベクトルを割り当て、そのベクトル同士の関係を損失を通じて調整する。
結果として、同じカテゴリの再現性が高いだけでなく、別カテゴリとの比較でも情報が共有されやすくなる。one-hotが「識別」中心であったのに対し、埋め込みは「近さ」や「相関」を表すことを狙う。
4.2.2 one-hotからの段階的置換
移行は段階的に行われることがある。たとえば初期実装ではone-hotで動作確認をし、その後に埋め込み層を追加して、カテゴリIDから埋め込みベクトルを取得する方式へ切り替える。損失関数側がクラス番号を受け取れる場合には、one-hotを生成する工程自体を省略できる。
置換の観点では、次元数の縮小、学習の安定化、計算効率の改善が期待される。一方で、埋め込みの導入により解釈の直感性は変化するため、可視化や評価設計も合わせて検討される。
4.3 関連する符号化(比較の観点)
one-hotは他の符号化と比較して理解すると整理しやすい。同じ「離散情報を数値へ変換する」という目的でも、表現の仕方が異なると性質が変わる。
4.3.1 ラベルエンコーディングとの違い
ラベルエンコーディングは、カテゴリに整数値を割り当てるだけの方式を指すことがある。たとえばカテゴリA,B,Cを0,1,2のように置き換えるのが典型例である。
この方式はone-hotより低次元で済むことが多いが、整数の大小関係がカテゴリ間の順序や距離を意味してしまう恐れがある。モデルによってはこの見かけ上の数値関係が不適切な学習につながることがあり、そのためone-hotや埋め込みのような表現が選ばれる。
4.3.2 マルチホットとの違い(概念)
マルチホットは、複数のカテゴリを同時に選択する状況で用いられる概念である。one-hotが「1つだけ1になる」のに対し、マルチホットでは選ばれた複数位置が同時に1になる。これにより、複数ラベルの教師情報や特徴量の共起を表現できる。
どのような形式を採用するかはタスクの仕様に依存する。単一ラベル分類ならone-hot、複数ラベル分類や複数タグ付与のような場合にはマルチホットが自然な選択になることがある。