您的某些功能可能是不屬於順序關係的離散值。例如:犬隻品種、字詞或郵遞區號。這些功能稱為「類別」,每個值都稱為類別。您可以將類別值表示為字串或偶數,但您無法比較這些值或將其減去。
一般來說,應將包含整數值的特徵做為類別資料,而非數字資料。例如,假設有一個值是整數的郵遞區號功能。如果您誤將這項功能表示為數字,則表示要求模型找出不同郵遞區號之間的數字關係;舉例來說,您預期模型會判斷郵遞區號 20004 是郵遞區號 10002 的兩倍 (或一半)。只要將郵遞區號表示為類別資料,即可讓模型為每個個別郵遞區號尋找不同的信號。
如果資料欄位的類別數量較少 (例如星期幾或顏色有限),則可以為每個類別建立專屬功能。例如:
圖 1:每個類別的獨特功能。
接著,模型可以瞭解每個顏色的權重。舉例來說,模型可能會發現綠色汽車的成本比綠色車輛高。
然後就可以為這些功能建立索引。
圖 2:已建立索引的功能。
這類對應稱為「詞彙」。
詞彙
字彙中的每個值都代表一個不重複的功能。
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
模型會從字串查詢索引,將 1.0 指派給功能向量中的對應運算單元,0.0 指派給功能向量中的所有其他運算單元。
圖 3:將類別對應至特徵向量的端對端程序。
稀疏表示法的注意事項
如果您的類別是一週中的某天,則可能會以特徵向量 [0, 0, 0, 0, 1, 0, 0] 代表。不過,大多數機器學習系統實作在記憶體中會以向量呈現這種向量。常見的表示法是非空白值及其對應的索引,例如,1.0 代表值,[4] 代表索引。這樣就能減少儲存大量 0 的記憶體用量,並允許更有效率的矩陣乘法。以基礎數學計算而言,[4] 相當於 [0, 0, 0, 0, 1, 0, 0]。
非詞彙 (OOV)
就像數值資料一樣,類別資料中也包含離群值。 舉例來說,假設資料集包含車輛說明。這個資料集的其中一項功能可以是車輛的顏色。假設這個資料集使用了常見的汽車顏色 (黑色、白色、灰色等),您就可將每種顏色分別歸入一個類別,以瞭解這些不同顏色對價值的影響。然而,假設這個資料集包含少數具有微色顏色的汽車 (紅酒、立陶宛、酪梨等)。與其為這些顏色個別提供類別,不如將類別全部串連為「Out of Vocab」 (OOV) 的通用類別。使用 OOV 時,系統不會浪費每個罕見顏色的訓練。
雜湊
另一個選項是將每個字串 (類別) 雜湊處理為可用的索引空間。雜湊往往會引發衝突,但您應運用模型學習相同索引中的一些共用類別,以表明特定問題。
就重要詞彙來說,由於衝突,雜湊可能會比選擇詞彙更差。另一方面,雜湊處理作業並不需要由特定組件組合,如果功能分佈情況會隨著時間改變而特別實用。
圖 4:將項目對應至詞彙表。
混合雜湊和詞彙
您可以採用混合做法,將雜湊與詞彙結合。請使用詞彙來滿足資料中最重要的類別,但將 OOV 值區換成多個 OOV 值區,並使用雜湊功能將類別指派給值區。
雜湊值區的類別必須共用一個索引,而模型可能無法充分預測,但我們已分配一些記憶體來嘗試解讀詞彙以外的類別。
圖 5:結合詞彙和雜湊的混合方法。
嵌入註意事項
來自機器學習速成課程的喚回度,即嵌入是連續值特徵的類別特徵。深度學習模型通常會將索引從索引轉換為嵌入。
圖 6:透過嵌入功能剖析特徵向量
我們討論的其他轉換可以儲存在磁碟上,但嵌入方式不同。由於嵌入是經過訓練的,因此不是一般的資料轉換,屬於模型的一部分。使用其他模型權重訓練,且功能相當於權重層。
預先訓練的嵌入功能會受到什麼影響?不過,預先訓練的嵌入在訓練期間仍可修改,因此在概念上仍是模型的一部分。