ディメンションという用語は、特徴ベクトルの要素数の同義語です。一部のカテゴリ特徴は低次元です。次に例を示します。
| 機能名 | カテゴリ数 | カテゴリの例 |
|---|---|---|
| snowed_today | 2 | True、False |
| skill_level | 3 | 初心者、実務担当者、エキスパート |
| season | 4 | 冬、春、夏、秋 |
| day_of_week | 7 | 月曜日、火曜日、水曜日 |
| 惑星 | 8 | 水星、金星、地球 |
カテゴリ特徴のカテゴリ数が少ない場合は、語彙としてエンコードできます。語彙エンコードを使用すると、モデルは可能なカテゴリ値をそれぞれ個別の特徴として扱います。トレーニング中、モデルはカテゴリごとに異なる重みを学習します。
たとえば、car_color という名前のカテゴリ特徴に基づいて、車の価格を予測するモデルを作成するとします。赤い車の価値は緑の車よりも高いかもしれません。メーカーが提供する外装色の数は限られているため、car_color は低次元のカテゴリ特徴です。次の図は、car_color の語彙(使用可能な値)を示しています。
演習: 理解度を確認する
"Red" は浮動小数点数ではありません。"Red" などの文字列を浮動小数点数に変換する必要があります。インデックス番号
機械学習モデルは浮動小数点数のみを操作できます。したがって、次の図のように、各文字列を一意のインデックス番号に変換する必要があります。
文字列を一意のインデックス番号に変換した後、モデルが値間の有意義な関係を学習できるように、データをさらに処理して表現する必要があります。カテゴリ特徴データがインデックス付き整数として残され、モデルに読み込まれると、モデルはインデックス付きの値を連続する浮動小数点数として扱います。この場合、モデルは「オレンジ」よりも「紫」の可能性が 6 倍高いと判断します。
ワンホット エンコーディング
語彙の構築の次のステップは、各インデックス番号をワンホット エンコーディングに変換することです。ワンホット エンコーディングでは、次のようになります。
- 各カテゴリは N 個の要素のベクトル(配列)で表されます。ここで、N はカテゴリの数です。たとえば、
car_colorに 8 つのカテゴリがある場合、それを表すワンホット ベクトルには 8 つの要素があります。 - ワンホット ベクトルの要素のうち、値が 1.0 のものは 1 つだけです。残りの要素の値はすべて 0.0 です。
たとえば、次の表は car_color の各色のワンホット エンコードを示しています。
| 機能 | 赤 | Orange | 青 | 黄 | 緑 | 黒人 | 紫 | 茶色 |
|---|---|---|---|---|---|---|---|---|
| "Red" | 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 |
| "Green" | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| "Black" | 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 |
特徴ベクトルに渡されるのは、文字列やインデックス番号ではなく、ワンホット ベクトルです。モデルは、特徴ベクトルの要素ごとに個別の重みを学習します。
次の図は、語彙表現におけるさまざまな変換を示しています。
スパース表現
値の大部分がゼロ(または空)である特徴は、スパースな特徴と呼ばれます。car_color などのカテゴリ特徴の多くは、スパース特徴になる傾向があります。スパース表現とは、スパース ベクトル内の 1.0 の位置を保存することを意味します。たとえば、"Blue" のワンホット ベクトルは次のようになります。
[0, 0, 1, 0, 0, 0, 0, 0]
1 は位置 2 にあるため(カウントを 0 から開始した場合)、上記のワンホット ベクトルのスパース表現は次のようになります。
2
スパース表現は、8 要素のワンホット ベクトルよりもはるかに少ないメモリを消費します。重要なのは、モデルはスパース表現ではなく、ワンホット ベクトルでトレーニングする必要があることです。
カテゴリデータの外れ値
数値データと同様に、カテゴリデータにも外れ値が含まれます。car_color には、一般的な色だけでなく、"Mauve" や "Avocado" などの使用頻度の低い外れ値の色も含まれているとします。これらの外れ値の色ごとに個別のカテゴリを指定するのではなく、語彙外(OOV)という単一の「包括的」カテゴリにまとめることができます。つまり、外れ値の色はすべて 1 つの外れ値バケットに分類されます。システムは、その外れ値バケットの単一の重みを学習します。
高次元のカテゴリ特徴をエンコードする
次の表に示すように、カテゴリ特徴の中には次元数の多いものがあります。
| 機能名 | カテゴリ数 | カテゴリの例 |
|---|---|---|
| words_in_english | ~ 500,000 | 「happy」、「walking」 |
| US_postal_codes | 約 42,000 | "02114"、"90301" |
| last_names_in_Germany | ~ 850,000 | 「Schmidt」、「Schneider」 |
カテゴリの数が多い場合、ワンホット エンコーディングは通常、適切な選択ではありません。別のエンベディング モジュールで詳しく説明するエンベディングは、通常、はるかに優れた選択肢です。エンベディングは次元数を大幅に削減するため、モデルに次の 2 つの重要なメリットがあります。
- 通常、モデルのトレーニングが高速になります。
- 通常、構築されたモデルは予測をより迅速に推論します。つまり、モデルのレイテンシが短くなります。
ハッシュ化(ハッシュ化トリックとも呼ばれます)は、次元数を減らすためのあまり一般的ではない方法です。