Machine-Learning

使用 XGBoost 時二進制特徵的一種熱編碼

  • December 2, 2019

我已經問過這個問題了;但是,我意識到這可能是解決此類問題的更好地方。

我很清楚,當將分類特徵與基於樹的模型(例如隨機森林和梯度提升)一起使用時,無需從 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將是bluegreen

作為 $ k $ 增加,這個問題變得更加明顯,因為你需要更多的分裂。這可能會以奇怪的方式與您的其他超參數交互,因為指定最大樹深度是避免與 boosted trees/ 過度擬合的常用策略xgboost

如果隔離類別 $ k $ 不重要,那麼這種影響可能對您的問題根本不重要。但如果類別 $ k $ 重要,你會傾向於長出非常深的樹來嘗試隔離它,要么通過分類變量,要么通過識別其他變量的潛在相互作用。

引用自:https://stats.stackexchange.com/questions/438875

comments powered by Disqus