
🪛 特徵編碼
為什麼需要特徵編碼?
特徵編碼是將非數值型資料(如類別、文本等)轉換為數值形式的過程,這是機器學習模型處理資料的必要步驟,因為:
- 模型數值需求:大多數機器學習算法只接受數值輸入,無法直接處理文字或類別資料
- 語義保存:編碼過程必須保留原始類別的語義信息,不同編碼方式會保留不同的信息特性
- 模型效能:選擇合適的編碼方法可以顯著提升模型的學習效率和預測準確度
- 避免誤導:不當的編碼可能引入錯誤的順序關係或數值大小關係,誤導模型學習
Label Encoding(標籤編碼)
標籤編碼將每個唯一類別映射為一個整數,是最簡單的類別編碼方法。
- 工作原理:
['蘋果', '香蕉', '橙子'] → [0, 1, 2]- 適用場景:
- 樹型模型(如決策樹、隨機森林)- 類別間存在自然順序關係(如:低、中、高)- 類別數量極大,需要節省存儲空間
- 優缺點:
- ✅ 實現簡單且高效
- ✅ 不會增加特徵維度
- ✅ 保留原始類別的唯一性
- ❌ 引入虛假的順序關係(如:蘋果 < 香蕉 < 橙子)
- ❌ 對線性模型和距離計算敏感的模型(如SVM、KNN、線性/邏輯迴歸)不適用
- ❌ 無法反映類別間的相似性或關係
One-Hot Encoding(獨熱編碼)
獨熱編碼為每個類別創建一個二元特徵,只有對應類別的特徵為1,其餘為0,避免引入順序關係。
- 工作原理:
[‘蘋果’, ‘香蕉’, ‘橙子’] →
蘋果 香蕉 橙子
[[ 1, 0, 0 ], # 蘋果
[ 0, 1, 0 ], # 香蕉
[ 0, 0, 1 ]] # 橙子
- 適用場景:
- 樹型模型(如決策樹、隨機森林
- 類別間存在自然順序關係(如:低、中、高)
- 類別數量極大,需要節省存儲空間
- 優缺點:
- ✅ 實現簡單且高效
- ✅ 不會增加特徵維度
- ✅ 保留原始類別的唯一性
- ❌ 引入虛假的順序關係(如:蘋果 < 香蕉 < 橙子)
- ❌ 對線性模型和距離計算敏感的模型(如SVM、KNN、線性/邏輯迴歸)不適用
- ❌ 無法反映類別間的相似性或關係
💡解決「虛擬變量陷阱」的方法:通常會丟棄一個二元特徵(k-1編碼),以避免線性相關性問題
Target Encoding(目標編碼)
目標編碼使用每個類別對應目標變量的統計值(通常是均值)來替換原始類別,有效捕捉類別與目標的關係。
- 工作原理:
假設目標變量為收入,則每個城市類別被替換為該城市居民的平均收入
城市: ['台北', '高雄', '台北', '台中', '高雄']
收入: [50000, 45000, 60000, 48000, 42000]
編碼後: 台北 → 55000 高雄 → 43500 台中 → 48000
- 適用場景:
- 高基數類別(如郵遞區號、產品ID等
- 預測任務中類別與目標變量有明顯相關性- 需要降低特徵維度時
- 優缺點:
- ✅ 高效處理高基數類別,不增加特徵維度
- ✅ 直接融合目標信息,增強特徵預測能力
- ✅ 可顯著提高模型性能,特別是處理稀疏類別時
- ❌ 容易導致過擬合,尤其是稀有類別
- ❌ 需要額外的交叉驗證策略(如K-fold)
- ❌ 對訓練集與測試集分布差異敏感
- ❌ 不適合處理不平衡數據集
💡防止過擬合的策略:
- 平滑處理:結合全局均值進行正則化
- 交叉驗證編碼:使用K-fold策略
頻率編碼 (Frequency Encoding)
頻率編碼使用類別在數據集中出現的頻率(百分比)替換原始類別,反映類別的普遍性。
- 工作原理:
城市: ['台北', '高雄', '台北', '台中', '高雄']
頻率計算: 台北: 2/5 = 0.4 高雄: 2/5 = 0.4 台中: 1/5 = 0.2
編碼後: [0.4, 0.4, 0.4, 0.2, 0.4]
- 適用場景:
- 類別出現頻率與目標變量相關
- 需要保持特徵的連續性和有序性
- 高基數類別的初步處理
- 優缺點:
- ✅ 簡單高效,不增加特徵維度
- ✅ 自然地反映類別稀有程度
- ✅ 將類別轉換為連續特徵,適用於各類模型
- ❌ 頻率相同的不同類別會被映射為相同的值
- ❌ 可能無法充分捕捉類別的語義信息
- ❌ 對於極度不平衡的類別分布可能效果有限
Embedding Layer(嵌入層編碼)
嵌入層是深度學習中的特殊層,可以將高維類別映射到低維連續向量空間,同時學習類別間的語義關係。
- 工作原理:
- 將每個類別映射為固定長度的密集向量(例如,將1000個城市映射到10維空間)
- 適用場景:
- 高基數類別(如單詞、產品ID)
- 深度學習模型架構
- 存在豐富的類別間關係需要學習
- 推薦系統、自然語言處理任務
- 優缺點:
- ✅ 能捕捉類別間的複雜關係和相似性
- ✅ 高效處理高基數類別
- ✅ 可以降維並保留類別間的語義信息
- ✅ 可重用預訓練的嵌入(如Word2Vec)
- ❌ 需要足夠的數據量進行有效學習
- ❌ 計算資源需求高
- ❌ 嵌入維度是需要調整的超參數
- ❌ 不適用於簡單模型或小型數據集
多重編碼策略與高級技巧
在實際應用中,通常會結合多種編碼方法以獲得最佳結果:
分組稀有類別:
- 將出現頻率低於閾值的類別合併為”其他”類別,避免過擬合
特徵交叉編碼:
- 組合多個類別特徵創建新特徵
- 城市 + 職業 → 台北_工程師, 台北_醫生, …
對比編碼:
- 對高基數類別採用多種編碼方法(如標籤+頻率),讓模型自行學習最有效的表示
基於領域知識的編碼:
- 根據業務理解將類別映射到有意義的數值
- 教育程度:高中=12, 大學=16, 碩士=18, 博士=22 (對應學習年數)




















