為梯度提升學習選擇預設的特徵編碼策略需要考慮的兩個重要因素是訓練時間和與特徵表示相關的預測效能。Automunge庫是處理表格資料常用的庫,它可以填充空值,也可以進行分類的編碼和歸一化等操作,預設的境況下Automunge對分類特徵進行二值化處理,並對數值特徵進行z-score歸一化。本文將透過對一系列不同資料集進行基準測試來驗證這些預設值是否是最最佳化的選項。
長期以來特徵工程對深度學習應用的有用性一直被認為是一個已解決的否定問題,因為神經網路本身就是通用函式逼近器(Goodfellow et al., 2016)。但是即使在深度學習的背景下,表格特徵也經常使用某種形式的編碼進行預處理。Automunge (Teague, 2022a) 這個 python 庫最初是為數字和分類特徵的基本編碼而構建的,例如 z-score 標準化和 one-hot 編碼。在迭代開發過程中開始加入了完整的編碼選項庫,包括一系列數字和分類特徵選項,現在也包括自動的規範化、二值化、雜湊和缺失資料填充場景。儘管這些編碼選項可能對於深度學習來說是多餘的,但這並不排除它們在其他模型中的效用,包括簡單迴歸、支援向量機、決策樹或本文的重點梯度提升模型。
本文目的是展示梯度提升模型下表格資料中的數字和分類特徵的各種編碼策略之間的基準測試研究的結果。
梯度提升
梯度提升 (Friedman, 2001) 是一種類似於隨機森林 (Briemen, 2001) 的決策樹學習正規化 (Quinlan, 1986),透過遞迴訓練迭代的目標以糾正前一次迭代的效能來提升最佳化模型。在實踐中一般都會使用 XGBoost 庫 (Chen & Guestrin, 2016) 和 LightGBM (Ke et al, 2017) 來進行建模。
到目前為止梯度提升還是被認為是 Kaggle 平臺上表格模態競賽的獲勝解決方案,甚至在用於基於視窗的迴歸時,它的效率也在更復雜的應用(如時間序列順序學習)中得到證明(Elsayed ,2022 ) .最近的表格基準測試論文中也說明,梯度提升可能仍然在大多數情況下勝過複雜的神經架構,如transformers (Gorishniy ,2021)。
傳統觀點認為,對於表格應用程式梯度提升模型具有比隨機森林更好的效能,但在沒有超引數調整的情況下會增加過度擬合的機率(Howard & Gugger,2020)。與隨機森林相比,梯度提升對調整引數的敏感性更高,並且執行的引數數量更多,所以通常需要比簡單的網格或隨機搜尋更復雜的調整。這樣就出現了各種不同的超引數搜尋的方法,例如一種可用的折衷方法是透過不同的引數子集進行順序網格搜尋(Jain,2016 ), Optuna 等黑盒最佳化庫(Akiba ,2019 年)可以使用更自動化甚至並行化的方法進行超引數的搜尋,這也是行業研究的一個活躍的方向。
特徵編碼
特徵編碼是指用於為機器學習準備資料的特徵集轉換。特徵編碼準備的常見形式包括數字特徵標準化和分類特徵的編碼,儘管一些學習庫(catboost)可能接受字串表示中的分類特徵並進行內部編碼,但是手動的進行分類特徵的轉換還是有必要的。在深度學習出現之前,通常使用提取資訊的替代表示來補充特徵或以某種方式進行特徵的組合來進行特徵的擴充,這種特徵工程對於梯度提升學習來說還是可以繼續使用的。所以本文的這些基準的目的之一是評估實踐與直接對資料進行訓練相比的好處。
特徵編碼的一個重要問題就是需要領域知識,例如基於填充數值分佈派生的 bin 與基於外部資料庫查詢提取 bin 來補充特徵之間是否有很大的區別?在 Automunge 的情況下,內部編碼庫的編碼基於固有的數字或字串屬性,並且不考慮可以根據相關應用程式域推斷出的相鄰屬性。(日期時間格式的功能例外,它在自動化下自動提取工作日、營業時間、節假日等,並根據不同時間尺度的迴圈週期對條目進行冗餘編碼)
數字特徵
數值標準化在實踐中最常被使用的,例如z-score。在實踐中可能發現的其他變化包括mean scaling 和max scaling 。更復雜的約定可以轉換除尺度之外的分佈形狀,例如 box-cox 冪律變換(Box & Cox, 1964) 或Scikit-Learn 的分位數轉換器qttf(Pedregosa ,2011),都可以將特徵轉換成一個更像高斯分佈的特性集。數字歸一化更常用於線性模型,而不是樹的模型,例如在神經網路中,它們的目的是跨特徵進行歸一化梯度更新,應用於數值特徵的標準化型別似乎會影響效能。
分類特徵
分類編碼通常在實踐中使用獨熱編碼進行轉換,這種熱編碼的做法在高基數情況下存在缺陷(分類很多導致生成的特徵多並且離散),梯度提升模型中分類標籤過多時甚至可能導致訓練超過記憶體限制。Automunge 庫試圖以兩種方式規避這種高基數邊緣情況,首先是預設使用二值化編碼而不是獨熱編碼,其次是透過區分雜湊編碼的最高基數集(Teague,2020a),減少唯一條目的數量。
分類二值化是可以理解為將模擬訊號轉換成數字訊號過程中的量化,返回特徵中每一個byte位代表是否屬於該類
分類表示的第三種常見編碼方式是標籤編碼,他將分類表示為一個連續的數值型變數。
基準基準
本文的基準測試是透過訓練時間和模型效能這兩個關鍵效能指標來評估一系列數字和分類編碼場景。在配備 AMD 3970X 處理器、128Gb RAM 和兩個 Nvidia 3080 GPU 的 Lambda 工作站上進行了約 1.5 周的測試。訓練是透過 Optuna 調整的 XGBoost 進行的,具有 5-fold快速交叉驗證 (Swersky et al, 2013) 和 如果33 次調整迭代沒有改進則停止訓練。效能指標是對25% 驗證集進行根據 f1 分數評估進行的。
以上是對分類任務的偏差和方差效能進行平衡評估的良好預設設定(Stevens ,2020 )。在來自 OpenML 基準測試庫(Vanschoren ,2013)的 31 個表格分類資料集上迴圈 5 次並取平均值。報告的指標是上面說提到的每種編碼型別的 31 個資料集的 5 次重複的平均值,這些編碼型別都使用了所有用於訓練的數字或分類特徵。
數字特徵的結果如下:
最終模型表現:
default:Automunge 的預設值使用 z 分數規範化(庫中的“nmbr”程式碼)從調整持續時間和模型效能的角度來看,預設編碼已被驗證為平均表現最佳的場景。
qttf:具有正態輸出分佈的 Scikit-Learn QuantileTransformer,分位數分佈轉換的平均表現不如簡單的 z 分數歸一化,儘管它仍然是表現最好的。
powertransform:根據分佈屬性在“bxcx”、“mmmx”或“MAD3”之間有條件地編碼(透過Automunge 庫的 powertransform = True 設定),這是效果最差的場景。
mmmx:min max scaling 'mnmx' 將特徵分佈轉移到 0-1 範圍內,這種情況的表現比 z-score 歸一化差得多,這可能是由於異常值導致資料在編碼空間中“擠在一起”的情況。
capped quantiles:min max scaling with capped outliers at 0.99 and 0.01 quantiles ('mnm3' code in library),這種情況最好直接與mmmx進行比較,表明了預設設定異常值上限並不能提高平均效能。
binstransform:z-score 歸一化再加上以 5 個獨熱編碼標準偏差箱(透過庫的 binstransform = True 設定),這個配置除了增加了訓練時間以外,似乎對模型效能沒有好處。
分類特徵的結果如下:
default:Automunge 的預設值是分類二值化(庫中的“1010”程式碼),從調整持續時間和模型效能的角度來看,預設編碼已被驗證為最好的。
onht:獨熱編碼,這通常用作主流實踐中的預設值,與二值化相比,模型效能影響出人意料地不好。基於這個測試,建議在特殊用例之外(例如,出於特徵重要性分析的目的)停止使用 one-hot 編碼。
ord3:具有按分類頻率“ord3”排序的整數的序數編碼,按類別頻率而不是字母順序對序數整數進行排序顯著有益於模型效能,在大多數情況下,表現比獨熱編碼好,但是仍然不如二值化。
ordl:“ordl”按字母順序排序的整數的序數編碼,字母排序的序數編碼(Scikit-Learn 的 OrdinalEncoder 的預設值)表現不佳,建議在應用序數時預設為頻率排序的整數。
hsh2:雜湊序號編碼(高基數類別“hsh2”的庫預設值),該基準主要用於參考,由於某些類別可能會合並,因此會對低基數集產生效能影響。
or19:多層字串解析“or19”(Teague,2020b),多層字串解析成功地超越了單熱編碼,並且是第二好的表現,但與普通二值化相比,它的效能不足以推薦預設值。如果應用程式可能具有與語法內容相關的某些擴充套件結構的情況下可以試試
總結
從訓練時間和模型效能的角度來看, Automunge 庫的 z-score 歸一化和分類二值化在測試中都表現了出了很好的效果,所以如果你在處理表格資料的時候可以優先使用 Automunge 的預設值進行特徵的處理,如果你想自己處理特徵,那麼z-score 歸一化和分類二值化也是首先可以考慮的方法。
基準測試包括以下表格資料集,此處顯示了它們的 OpenML ID 號:
- Click prediction / 233146
- C.C.FraudD. / 233143
- sylvine / 233135
- jasmine / 233134
- fabert / 233133
- APSFailure / 233130
- MiniBooNE / 233126
- volkert / 233124
- jannis / 233123
- numerai28.6 / 233120
- Jungle-Chess-2pcs / 233119
- segment / 233117
- car / 233116
- Australian / 233115
- higgs / 233114
- shuttle / 233113
- connect-4 / 233112
- bank-marketing / 233110
- blood-transfusion / 233109
- nomao / 233107
- ldpa / 233106
- skin-segmentation / 233104
- phoneme / 233103
- walking-activity / 233102
- adult / 233099
- kc1 / 233096
- vehicle / 233094
- credit-g / 233088
- mfeat-factors / 233093
- arrhythmia / 233092
- kr-vs-kp / 233091
https://www.overfit.cn/post/32b4d95e1c64425084a53f7ce522c188
作者:Nicholas Teague