ディメンションという用語は、特徴ベクトルの要素数の同義語です。カテゴリ特徴の中には、次元が低いものもあります。次に例を示します。
機能名 | # of categories | カテゴリの例 |
---|---|---|
snowed_today | 2 | True、False |
skill_level | 3 | 初級、実務担当者、エキスパート |
season | 4 | 冬、春、夏、秋 |
day_of_week | 7 | 月曜日、火曜日、水曜日 |
惑星 | 8 | 水星、金星、地球 |
カテゴリ特徴の候補となるカテゴリが少ない場合は、ボキャブラリとしてエンコードできます。語彙エンコードを使用すると、モデルは考えられる各カテゴリ値を個別の特徴として扱います。トレーニング中に、モデルは各カテゴリに異なる重みを学習します。
たとえば、car_color
という名前のカテゴリ特徴に基づいて自動車の価格を予測するモデルを作成するとします。赤い車は緑色の車よりも価値が高いかもしれません。メーカーが提供する外装色は限られているため、car_color
は低次元のカテゴリ特徴です。次の図は、car_color
の語彙(有効な値)を示しています。
演習: 理解度を確認する
インデックス番号
機械学習モデルは浮動小数点数のみを操作できます。したがって、次の図に示すように、各文字列を一意のインデックス番号に変換する必要があります。
文字列を一意のインデックス番号に変換したら、データをさらに処理して、モデルが値間の有意な関係を学習できるようにする必要があります。カテゴリ特徴データをインデックス付き整数のままモデルに読み込むと、モデルはインデックス付き値を連続浮動小数点数として扱います。モデルは、「紫」が「オレンジ」よりも 6 倍の確率で発生すると見なします。
ワンホット エンコーディング
語彙の作成の次のステップは、各インデックス番号をワンホット エンコードに変換することです。ワンホット エンコーディングでは、
- 各カテゴリは、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 |
"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"
の 1 ホット ベクトルは次のようになります。
[0, 0, 1, 0, 0, 0, 0, 0]
1
は 2 番目の位置にあるため(カウントを 0 から開始した場合)、上記のワンホット ベクトルのスパース表現は次のようになります。
2
スパース表現は、8 要素の 1 ホット ベクトルよりもはるかに少ないメモリを使用します。重要なのは、モデルはスパース表現ではなく、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 つの重要なメリットがあります。
- 通常、モデルのトレーニングが高速化されます。
- 通常、構築されたモデルは予測をより迅速に推論します。つまり、モデルのレイテンシが低くなります。
ハッシュ化(ハッシュ化トリックとも呼ばれます)は、次元数を減らすためのあまり一般的ではない方法です。
ハッシュ化の詳細については、こちらをクリックしてください