序數編碼 是什麼?
Ordinal Encoding:序數編碼 的完整解釋
將類別型特徵依照其固有順序轉換為整數的編碼方式,保留類別間的大小關係。
序數編碼(Ordinal Encoding)是機器學習資料預處理中用於處理類別特徵的重要方法之一。其核心概念是:當類別特徵的各個值之間存在明確的大小或順序關係時,用能夠反映此順序的整數來代替原始類別標籤,讓演算法能夠感知並利用這種排序資訊。
最典型的序數型特徵例子包括:教育程度(國小 < 國中 < 高中 < 大學 < 研究所)、產品品質評級(差 < 普通 < 良好 < 優秀)、問卷的滿意度量表(非常不滿意 < 不滿意 < 普通 < 滿意 < 非常滿意)、衣服尺寸(XS < S < M < L < XL < XXL)等。對於這類具有內在順序的特徵,序數編碼能夠有效地將其語意保留在數值表示中。
序數編碼的實作相對簡單,通常透過建立一個對應字典(Mapping Dictionary),例如 {「差」: 0, 「普通」: 1, 「良好」: 2, 「優秀」: 3},將每個類別值替換為對應的整數。在 Python 的 scikit-learn 中,OrdinalEncoder 類別提供了標準化的實作,可以透過 categories 參數指定每個特徵的類別順序,確保編碼結果與業務語意一致。
理解序數編碼與其他類別編碼方法的差異至關重要。與獨熱編碼(One-Hot Encoding)相比,序數編碼不會增加特徵維度,對記憶體和計算資源更友好,但要求類別間確實存在順序關係。若對沒有固定順序的名義型特徵(Nominal Feature,如顏色、城市名稱)使用序數編碼,會人為賦予這些類別一種不存在的大小關係,可能誤導模型學習到錯誤的規律。
標籤編碼(Label Encoding)與序數編碼在形式上非常相似,兩者都是將類別映射為整數,但語意上有重要差異。標籤編碼通常用於目標變數(Y),且不保證映射的整數順序有意義。序數編碼則專門用於輸入特徵,且映射的整數順序需要嚴格對應業務中的順序邏輯。
在模型選擇上,序數編碼後的特徵對基於樹的模型(決策樹、隨機森林、XGBoost、LightGBM)效果最為直接,因為這類模型通過閾值分裂來利用特徵的相對大小,能夠自然地處理序數型數值。對於線性模型,序數編碼隱含了類別間等距的假設(例如「差到普通」的差距 = 「普通到良好」的差距),若類別間距並不均等,這個假設可能降低模型效果,此時可能需要進一步處理或採用其他編碼方式。
在 iPAS AI 應用規劃師的考試中,序數編碼通常出現在特徵工程與資料預處理的題目中,考題可能要求考生區分序數型與名義型特徵的編碼策略,或判斷在特定場景下應選擇哪種編碼方法。熟悉序數編碼的適用條件、優缺點,以及與獨熱編碼和標籤編碼的差異,是應對這類題目的關鍵。 序數編碼(Ordinal Encoding)是機器學習特徵工程中處理類別型變數的方法之一,將具有自然排序關係的類別特徵映射為整數,保留類別之間的順序資訊。
序數編碼最適合具有明確大小關係的類別特徵,例如教育程度(小學=1, 國中=2, 高中=3, 大學=4, 研究所=5)、商品評分(差=1, 尚可=2, 普通=3, 好=4, 非常好=5)、衣服尺碼(XS=1, S=2, M=3, L=4, XL=5)。在這些情況下,整數編碼正確反映了類別之間的順序關係,讓模型能從排序中學習有意義的特徵。
序數編碼與獨熱編碼(One-Hot Encoding)的選擇是特徵工程的重要決策點。獨熱編碼將每個類別轉為二元向量,適合無序類別(如國家名稱、顏色);序數編碼適合有序類別,且不增加特徵維度(高基數類別用獨熱編碼會造成維度爆炸)。然而,對於名義類別(如台北、台中、高雄),錯誤使用序數編碼會讓模型誤以為城市之間有大小關係,可能引入假的特徵資訊。
對於沒有自然順序的高基數類別特徵,目標編碼(Target Encoding)是有力替代:用每個類別對應的目標變數平均值替代類別標籤,既保留預測信號,又不增加維度。但目標編碼容易過擬合,需要搭配交叉驗證或平滑化技術使用。
在決策樹和隨機森林中,序數編碼和獨熱編碼的效果差異較小,因為樹模型本身通過分裂尋找最佳閾值,能處理任意數值特徵。但在線性模型和距離基礎算法中,序數編碼的值大小具有實際意義,必須確保排序正確反映類別的真實關係。
scikit-learn 的 OrdinalEncoder 允許用戶指定每個特徵的類別順序,確保編碼符合業務邏輯。