カテゴリデータ: 語彙とワンホット エンコーディング

ディメンションという用語は、特徴ベクトル内の要素数と同義です。カテゴリ特徴の中には、次元が低いものもあります。例:

機能名 # of categories カテゴリの例
snowed_today 2 True、False
skill_level 3 初級、実務担当者、エキスパート
season 4 冬、春、夏、秋
day_of_week 7 月曜日、火曜日、水曜日
惑星 8 水星、金星、地球

カテゴリ特徴の候補となるカテゴリが少ない場合は、ボキャブラリとしてエンコードできます。語彙エンコードでは、モデルは考えられる各カテゴリ値を個別の特徴として扱います。トレーニング中に、モデルはカテゴリごとに異なる重みを学習します。

たとえば、car_color という名前のカテゴリ特徴に基づいて自動車の価格を予測するモデルを作成するとします。おそらく、赤い車は緑色の車よりも価値が高いでしょう。メーカーが提供する外装色は限られているため、car_color は低次元のカテゴリ特徴です。次の図は、car_color の語彙(可能な値)を示しています。

図 1. パレット内の各色は、個別の特徴として表されます。つまり、各色は特徴ベクトルの個別の特徴です。たとえば、「赤」は特徴、「オレンジ」は別の特徴です。
図 1. カテゴリごとに固有の機能。

演習: 直感を確認する

真偽: 機械学習モデルは、これらの値を数値ベクトルに変換せずに、「赤」「黒」などの未加工の文字列値を直接トレーニングできます。
正しい
トレーニング中、モデルで操作できるのは浮動小数点数のみです。文字列 "Red" は浮動小数点数ではありません。"Red" などの文字列は浮動小数点数に変換する必要があります。
False
機械学習モデルは浮動小数点値を持つ特徴のみをトレーニングできるため、トレーニング前にこれらの文字列を浮動小数点値に変換する必要があります。

インデックス番号

機械学習モデルで操作できるのは浮動小数点数のみです。したがって、次の図に示すように、各文字列を一意のインデックス番号に変換する必要があります。

図 2. 各色には一意の整数値が関連付けられています。たとえば、「赤」は整数 0 に関連付けられ、「Orange」は整数 1 に関連付けられます(以下同様)。
図 2. インデックス登録された特徴。

演習:直感をチェック

モデルは、図 2 に示すインデックス番号で直接トレーニングする必要がありますか?
はい
インデックス番号でトレーニングされたモデルは、各インデックス番号を数値として誤って扱い、"Black"(インデックス番号 5)を "Orange"(インデックス番号 1)よりも 5 倍有意であると見なします。
いいえ
モデルはインデックス番号でトレーニングしないでください。その場合、モデルは各インデックス番号を数値として扱い、モデルにとって "Black"(インデックス番号 5)は "Orange"(インデックス番号 1)よりも 5 倍意味があるとみなされます。

ワンホット エンコーディング

語彙作成の次のステップは、各インデックス番号をワンホット エンコーディングに変換することです。ワンホット エンコーディングでは、

  • 各カテゴリは、N 個の要素のベクトル(配列)で表されます。ここで、N はカテゴリの数です。たとえば、car_color に 8 つのカテゴリがある場合、ワンホット ベクトル表現には 8 つの要素があります。
  • 1 ホット ベクトルの要素のうち、1 つの要素の値が 1.0 で、残りの要素の値はすべて 0.0 です。

たとえば、次の表は car_color の各要素のワンホット エンコードを示しています。

機能 Orange 黒人 茶色
「赤」 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"Blue" 0 0 1 0 0 0 0 0
「黄色」 0 0 0 1 0 0 0 0
"緑" 0 0 0 0 1 0 0 0
"ブラック" 0 0 0 0 0 1 0 0
"紫" 0 0 0 0 0 0 1 0
"Brown" 0 0 0 0 0 0 0 1

特徴ベクトルに渡されるのは、文字列やインデックス番号ではなく、ワンホット ベクトルです。モデルは、特徴ベクトルの要素ごとに個別の重みを学習します。

次の図は、語彙表現のさまざまな変換を示しています。

図 3. カテゴリを特徴ベクトルにマッピングするエンドツーエンド プロセスの図。この図では、入力特徴は「Yellow」、「Orange」、「Blue」、「Blue」です。システムは、保存されている語彙(「赤」は 0、「オレンジ」は 1、「青」は 2、「黄色」は 3 など)を使用して、入力値を ID にマッピングします。したがって、システムは「黄色」、「オレンジ」、「青」、「青」を 3、1、2、2 にマッピングします。システムは、これらの値をワンホット特徴ベクトルに変換します。たとえば、8 つの色を持つシステムの場合、3 は 0, 0, 0, 1, 0, 0, 0, 0 になります。
図 3. カテゴリを特徴ベクトルにマッピングするエンドツーエンド プロセス。

スパース表現

値の大部分がゼロ(または空)の特徴は、スパースな特徴と呼ばれます。car_color などの多くのカテゴリ特徴は、スパースな特徴になる傾向があります。スパース表現とは、1.0 の位置をスパース ベクトルに格納することを意味します。たとえば、"Blue" の 1 ホット ベクトルは次のようになります。

[0, 0, 1, 0, 0, 0, 0, 0]

1 は 2 番目の位置にあるため(カウントを 0 から開始した場合)、上記のワンホット ベクトルのスパース表現は次のようになります。

2

スパース表現は、8 要素の 1 ホット ベクトルよりもはるかに少ないメモリを使用します。重要な点として、モデルはスパース表現ではなくワンホット ベクトルでトレーニングする必要があります。

カテゴリデータの外れ値

数値データと同様に、カテゴリデータにも外れ値が含まれます。car_color に、人気のある色だけでなく、めったに使用されない外れ値("Mauve""Avocado" など)も含まれているとします。これらの外れ値の色に個別のカテゴリを割り当てるのではなく、語彙外(OOV)という単一の「包括的」カテゴリにまとめることができます。つまり、すべての外れ値の色が 1 つの外れ値バケットに分類されます。システムは、その外れ値バケットの単一の重みを学習します。

高次元のカテゴリ特徴のエンコード

カテゴリ特徴には、次の表に示すように、多くのディメンションがあります。

機能名 # of categories カテゴリの例
words_in_english ~500,000 「happy」、「walking」
US_postal_codes 約 42,000 「02114」、「90301」
last_names_in_Germany ~ 850,000 「Schmidt」、「Schneider」

カテゴリの数が多い場合は、通常、ワンホット エンコードは適していません。通常は、エンベディング(別の エンベディング モジュールで詳述)のほうが適しています。エンベディングを使用すると次元数が大幅に削減されるため、モデルに次の 2 つの重要なメリットがあります。

  • 通常、モデルのトレーニングが高速化されます。
  • 通常、ビルドされたモデルは予測をより迅速に推論します。つまり、モデルのレイテンシが低くなります。

ハッシュ化ハッシュ化トリックとも呼ばれます)は、次元数を減らすためのあまり一般的ではない方法です。