ディメンションという用語は、特徴ベクトル内の要素数と同義です。カテゴリ特徴の中には、次元が低いものもあります。例:
機能名 | # of categories | カテゴリの例 |
---|---|---|
snowed_today | 2 | True、False |
skill_level | 3 | 初級、実務担当者、エキスパート |
season | 4 | 冬、春、夏、秋 |
day_of_week | 7 | 月曜日、火曜日、水曜日 |
惑星 | 8 | 水星、金星、地球 |
カテゴリ特徴の候補となるカテゴリが少ない場合は、ボキャブラリとしてエンコードできます。語彙エンコードでは、モデルは考えられる各カテゴリ値を個別の特徴として扱います。トレーニング中に、モデルはカテゴリごとに異なる重みを学習します。
たとえば、car_color
という名前のカテゴリ特徴に基づいて自動車の価格を予測するモデルを作成するとします。おそらく、赤い車は緑色の車よりも価値が高いでしょう。メーカーが提供する外装色は限られているため、car_color
は低次元のカテゴリ特徴です。次の図は、car_color
の語彙(可能な値)を示しています。
演習: 直感を確認する
"Red"
は浮動小数点数ではありません。"Red"
などの文字列は浮動小数点数に変換する必要があります。インデックス番号
機械学習モデルで操作できるのは浮動小数点数のみです。したがって、次の図に示すように、各文字列を一意のインデックス番号に変換する必要があります。
演習:直感をチェック
"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 |
特徴ベクトルに渡されるのは、文字列やインデックス番号ではなく、ワンホット ベクトルです。モデルは、特徴ベクトルの要素ごとに個別の重みを学習します。
次の図は、語彙表現のさまざまな変換を示しています。
スパース表現
値の大部分がゼロ(または空)の特徴は、スパースな特徴と呼ばれます。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 つの重要なメリットがあります。
- 通常、モデルのトレーニングが高速化されます。
- 通常、ビルドされたモデルは予測をより迅速に推論します。つまり、モデルのレイテンシが低くなります。
ハッシュ化(ハッシュ化トリックとも呼ばれます)は、次元数を減らすためのあまり一般的ではない方法です。