logo
Loading...

tree-based 模型是否可以接受 one-hot encoding 的向量? (Non-tree-based/tree-based) - Cupoy

Non-tree-based 的模型皆需要做emcoding及Normalization,但我的問題...

tree-based 模型是否可以接受 one-hot encoding 的向量? (Non-tree-based/tree-based)

2021/06/17 上午 03:17
機器學習共學討論版
沼澤莉莉
觀看數:191
回答數:1
收藏數:0

Non-tree-based 的模型皆需要做emcoding及Normalization,但我的問題為Tree-based的模型: 像是Decision Tree, RF, 基於樹的 Ensemble(Boosting&Bagging), xgboost 皆為Tree - Based 模型, * 對於數值型資料,不需要進行Normalization 因為 tree-based非基於距離度量而進行模型預測和分類的模型,因此對特徵之間不同取值範圍不敏感,沒有必要做數據標準化處理,這部分沒有問題 1. Kaggle 上有人回答將資料做 Normalization 不會影響 tree-based 模型的效果 ref: https://www.kaggle.com/gpreda/default-of-credit-card-clients-predictive-models ![image](http://kwassistfile.cupoy.com/0000017A1636C51B000000296375706F795F72656C656173655155455354/1623842559429/large) * 但對於離散型資料,我查過很多資料,但說法不一,有人說轉成one-hot encoding效果會變差,也有人說效果不錯,因此想請問! 1. tree-based不適合放入one-hot encoding: 效果變差的原因可能是 (1) ref: https://link.medium.com/zwviFwCi9gb 將稀疏性引入了資料集,這是不受歡迎的 (2) ref: https://zhuanlan.zhihu.com/p/134495345 Tree Model不太需要one-hot編碼,尤其當類別特徵維度很高的時候(一般用於category數量<4的情況) ,訓練時間高、樹很容易搞得很深 [註] High Cardinality — 指的是類別欄位中,類別的種類太多 2. 也有人在tree-based上使用one-hot且scaler: ref: https://www.kaggle.com/gunesevitan/titanic-advanced-feature-engineering-tutorial 但是我看到 Kaggle的鐵達尼號問題, 也有人在RF上使用one-hot且scaler的資料(關於scaler, 就與第一張圖片說法矛盾), 也有人提出相關問題但沒得到回覆 ![image](http://kwassistfile.cupoy.com/0000017A1636C51B000000296375706F795F72656C656173655155455354/1623842559427/large) 3. 也有人在random forest上使用one-hot: ref: https://www.kaggle.com/dansbecker/using-categorical-data-with-one-hot-encoding 這是另一個kaggle notebook, 在RF上使用one-hot且效果不錯, 有人在下面提問, 但同樣沒有得到回覆 ![image](http://kwassistfile.cupoy.com/0000017A1636C51B000000296375706F795F72656C656173655155455354/1623842559428/large) ------ 問題總結: 1. 一份資料中, 有 "無序離散型 資料" 且使用的是 tree-based 模型 這種情況下, 要如何處理像是 Sex = (0, 1 ,2) / Embarked = (Cherbourg, Queenstown, Southampton) 這種 "無序離散型 資料" ? 2. 由於各方說法不一, 我想知道到底什麼樣的模型適合接收one-hot encoding, 目前查到是 LightGBM & catboost 2. 對於 tree-based, 將離散型資料轉成 one-hot encoding 是正確還錯誤 4. 是不是只要離散型欄位數量為小於5, 在tree-based的模型上就可以使用one-hot encoding ? 5. 對症下藥的方法? 之前看過許多問答, 看到這篇, 但還是沒有回答到怎麼知道怎什麼情況下做適合的Encoding處理,會讓效果較佳:「Label Encoding適合樹狀模型; One hot Encoding適合非樹狀模型」比較像是會不會有影響,而不是效果好不好,理論上應該一個個欄位根據判斷去做適合的Encoding處理,會讓效果較佳,不同資料會有不同的分佈跟情況,各自調整才能對症下藥

回答列表

  • 2021/06/18 下午 01:21
    王健安
    贊同數:1
    不贊同數:0
    留言數:0

    您好: 我想我直接用案例搭配演算法的概念來向您說明會比較容易理解。 假設這兒有一筆學生相關資料,想預測在某個比賽中某個學生會得到「冠軍、亞軍或季軍」, 其中有一個特徵是學生年級「一年級、二年級、三年級、四年級、五年級、六年級」, 若將學生年級以one-hot encoding表示, 則會從一個特徵變成六個特徵,分別為: 1. 是否為一年級 1. 是否為二年級 1. 是否為三年級 1. 是否為四年級 1. 是否為五年級 1. 是否為六年級 在 Tree-based algorithm 中(例如:Decision Tree、Random Forest), 使用 Gini 或是 Entropy 計算出分類狀況,在決定該以哪個變數作為分支依據, 假設六年級比其他年級學生更有機會得到冠軍, 那麼使用one-hot encoding分類時就能依照「是六年級」與「不是六年級」進行分支, 而達到良好的分類效果; 假設冠亞季軍會平均分佈在六個年級中,那麼使用以一個變項表示六個年級(label encoding)會較為適合, 此外,建置 Tree-based model 可以設定每個分支點最多可以有幾個分支, 若設定三個(含)以上,那麼 one-hot encoding 就無法展現出 Tree 的特性。 綜上所述, 離散型資料究竟適合 label encoding 還是 one-hot encoding, 除了與資料特性本身外,與 algorithm也有關係, 這也是需要透過參數調整的過程得出最佳解, 因此「絕對」沒有一個標準且固定的答案, 畢竟大部分的機器學習或深度學習, 它不是用「公式推導」而是用「數值解」的想法找出最佳配對。