2.3 類別資料編碼
類別欄位不能直接丟進 Dense layer,必須先轉成數字表示。本篇示範 pandas one-hot encoding,也示範 Keras StringLookup 與 CategoryEncoding 類型的前處理方式,讓模型能同時使用數值欄位與文字類別欄位。
1. 學習目標
表格資料常包含城市、設備類型、部門、產品類別等文字欄位。模型不理解文字類別本身,因此需要把類別轉成 index、one-hot 或 embedding。
2. 常見類別編碼方式
| 方法 | 說明 | 適合情境 |
|---|---|---|
| One-hot encoding | 每個類別變成一個 0/1 欄位 | 類別數量不多 |
| Integer lookup | 類別轉成整數 index | 搭配 embedding |
| Embedding | 將類別學成低維向量 | 類別數量較多 |
| Keras preprocessing layer | 把編碼流程放進模型 | 部署時保留前處理 |
3. 未知類別要注意
正式資料常會出現訓練時沒看過的新類別。Keras StringLookup 可保留 OOV token,讓未知類別有固定處理方式。
4. 實作流程
Notebook 會建立一份含城市、裝置類型、年齡與拜訪次數的合成資料,模擬常見的使用者行為表格。流程先示範 pandas get_dummies,再使用 Keras preprocessing layer 建立可訓練模型,最後測試訓練時沒看過的新城市與新裝置。
5. 如何套用自己的資料?
先列出數值欄位與類別欄位。類別欄位若數量少,可用 one-hot;若類別很多,後續可改用 embedding。正式專案中也要保留 OOV 處理,避免未來推論遇到新類別時整個流程中斷。
6. 小結
類別編碼的重點是讓訓練、驗證、測試與未來推論使用同一套 mapping。把前處理放進 Keras layer,可降低部署時前處理不一致的風險。