類別資料:詞彙和 one-hot 編碼

「維度」一詞是特徵向量中元素數量的同義詞。 部分類別特徵是低維度。例如:

功能名稱 類別數量 類別範例
snowed_today 2 True、False
skill_level 3 新手、從業人員、專家
season 4 冬季、春季、夏季、秋季
day_of_week 7 週一、週二、週三
行星 8 水星、金星、地球

如果類別特徵的可能類別數量較少,您可以將其編碼為詞彙。使用詞彙編碼時,模型會將每個可能的類別值視為個別特徵。訓練期間,模型會學習各類別的不同權重。

舉例來說,假設您要建立模型,根據名為 car_color 的類別特徵等因素預測車輛價格。或許紅車比綠車更有價值。 由於製造商提供的外觀顏色數量有限,car_color 是低維度的類別特徵。下圖建議 car_color 的詞彙 (可能的值):

圖 1. 調色盤中的每個顏色都會以個別特徵表示。也就是說,每個顏色都是特徵向量中的個別特徵。
      例如「紅色」是一項功能,「橘色」是另一項功能,以此類推。
圖 1. 每個類別的專屬特徵。

練習:確認您的理解程度

對或錯:機器學習模型可直接訓練原始字串值,例如「Red」和「Black」,無須將這些值轉換為數值向量。
在訓練期間,模型只能操控浮點數。 字串「"Red"」不是浮點數。您必須將 "Red" 等字串轉換為浮點數。
機器學習模型只能根據浮點數值訓練特徵,因此您必須先將這些字串轉換為浮點數值,才能進行訓練。

索引編號

機器學習模型只能操控浮點數。 因此,您必須將每個字串轉換為不重複的索引編號,如下圖所示:

圖 2. 每種顏色都與一個不重複的整數值相關聯。舉例來說,「紅色」與整數 0 相關聯,「橘色」與整數 1 相關聯,依此類推。
圖 2. 已建立索引的特徵。

將字串轉換為不重複的索引編號後,您需要進一步處理資料,以利模型瞭解值之間的有意義關係。如果類別特徵資料保留為索引整數並載入模型,模型會將索引值視為連續浮點數。模型會認為「紫色」的可能性是「橘色」的六倍。

one-hot 編碼

建立詞彙表的下一個步驟,是將每個索引編號轉換為one-hot 編碼。在 one-hot 編碼中:

  • 每個類別都以 N 個元素的向量 (陣列) 表示,其中 N 是類別數量。舉例來說,如果 car_color 有八個可能的類別,則代表的 one-hot 向量會有八個元素。
  • 在 one-hot 向量中,只有一個元素的值為 1.0,其餘元素的值皆為 0.0。

舉例來說,下表顯示 car_color 中每種顏色的 one-hot 編碼:

功能 紅色 Orange 藍色 黃色 綠色 黑色 紫色 棕色
「紅色」 1 0 0 0 0 0 0 0
「Orange」 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 0
「紫色」 0 0 0 0 0 0 1 0
「棕色」 0 0 0 0 0 0 0 1

傳遞至特徵向量的是獨熱向量,而非字串或索引編號。模型會為特徵向量的每個元素學習個別權重。

下圖說明詞彙表示法中的各種轉換:

圖 3. 圖表:將類別對應至特徵向量的端對端程序。在圖表中,輸入特徵為「黃色」、「橘色」、「藍色」和「藍色」(第二次)。系統會使用儲存的詞彙 (「紅色」為 0、「橘色」為 1、「藍色」為 2、「黃色」為 3,依此類推),將輸入值對應至 ID。因此,系統會將「黃色」、「橘色」、「藍色」和「藍色」對應至 3、1、2、2。接著,系統會將這些值轉換為 one-hot 特徵向量。舉例來說,假設系統有八種可能的顏色,3 會變成 0、0、0、1、0、0、0、0。
圖 3. 將類別對應至特徵向量的端對端程序。

稀疏表示法

如果特徵的值大多為零 (或空白),則稱為稀疏特徵。許多類別特徵 (例如 car_color) 往往是稀疏特徵。稀疏表示法:在稀疏向量中儲存 1.0 的位置。舉例來說,"Blue" 的 one-hot 向量為:

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

由於 1 位於位置 2 (從 0 開始計數),因此先前單一熱向量的稀疏表示法為:

2

請注意,稀疏表示法使用的記憶體遠少於八個元素的 one-hot 向量。請務必注意,模型必須訓練單熱編碼向量,而非稀疏表示法。

類別型資料中的離群值

與數值資料一樣,類別資料也包含離群值。假設 car_color 不僅包含熱門顏色,還包含一些不常使用的離群值顏色,例如 "Mauve""Avocado"。與其為每個離群值顏色提供個別類別,不如將這些顏色歸入單一「全方位」類別,也就是詞彙外 (OOV)。換句話說,所有離群值顏色都會歸入單一離群值特徵分塊。系統會為該離群值區學習單一權重。

編碼高維度類別特徵

部分類別特徵的維度數量較多,例如下表中的特徵:

功能名稱 類別數量 類別範例
words_in_english ~500,000 "happy", "walking"
US_postal_codes ~42,000 「02114」、「90301」
last_names_in_Germany ~850,000 「Schmidt」、「Schneider」

如果類別數量較多,通常不適合使用 one-hot 編碼。 嵌入 (詳見另一個嵌入模組) 通常是更好的選擇。嵌入可大幅減少維度數量,對模型有兩項重要優點:

  • 模型訓練速度通常會更快。
  • 建構的模型通常能更快推斷預測結果。也就是說,模型延遲時間較短。

雜湊 (也稱為雜湊技巧) 是較不常見的維度縮減方式。