使用 XGBoost 時二進制特徵的一種熱編碼
我已經問過這個問題了;但是,我意識到這可能是解決此類問題的更好地方。
我很清楚,當將分類特徵與基於樹的模型(例如隨機森林和梯度提升)一起使用時,無需從 N 級分類特徵中刪除一級。例如,下面的具有三個級別的顏色特徵可以做成三個二值特徵。
Color|| Color_R | Color_B | Color_G ____ ||_________|_________|________ R || 1 | 0 | 0 B || 0 | 1 | 0 G || 0 | 0 | 1
但是,二元特徵(例如,TRUE/FALSE、MALE/FEMALE)呢?是否應該將其保留為單個二進制特徵(下面的選項 I),還是應該將其一次性編碼為兩個二進制特徵(下面的選項 II)
選項一
Gender || Gender | ____ ||_________| M || 1 | F || 0 | M || 1 |
選項二
Gender || Gender_M | Gender_F ____ || _________|_________ M || 1 | 0 F || 0 | 1 M || 1 | 0
確實,僅使用時您不會丟失信息 $ k-1 $ 類別。在線性模型中,我們都熟悉虛擬變量陷阱以及模型與 $ k-1 $ 水平和截距和模型 $ k $ 水平和沒有攔截。但是,您使用的是基於樹的模型,因此遞歸二元拆分的工作原理很重要!
對於具有 2 個水平的因子,例如“紅色”和“藍色”,顯然使用 $ k-1 $ 1hot方法相當於選擇 $ k $ 1-熱法。這是因為
NOT blue
暗示red
。在這種情況下,沒有區別。但對於 $ k>2 $ 類別,你需要 $ k-1 $ 二進制拆分以隔離省略的級別( $ k $ 級)。因此,如果您有 3 個級別,例如“red”、“green”、“blue”,但您只包含“red”和“green”的 1-hot 特徵,則需要 2 次連續拆分來隔離“blue”樣本. 這是因為如果您在“紅色”上拆分,則子節點是
red
和的節點NOT red = green OR blue
。要在編碼方案中省略類別“藍色”時隔離“藍色”,您必須再次在“綠色”上拆分,因為這樣子節點green OR blue
將是blue
和green
。作為 $ k $ 增加,這個問題變得更加明顯,因為你需要更多的分裂。這可能會以奇怪的方式與您的其他超參數交互,因為指定最大樹深度是避免與 boosted trees/ 過度擬合的常用策略
xgboost
。如果隔離類別 $ k $ 不重要,那麼這種影響可能對您的問題根本不重要。但如果類別 $ k $ 很重要,你會傾向於長出非常深的樹來嘗試隔離它,要么通過分類變量,要么通過識別其他變量的潛在相互作用。