target encoding
- 2020 年 4 月 26 日
- AI
from
CatBoost演算法梳理
貌似是datawhale的大佬出的,在公眾號上看過。
下面主要針對上述材料進行注釋。

用類別對應的標籤的期望來代替原始的類別,所謂的期望,簡單理解為均值即可。
最原始的:

舉個例子吧,比如有10個樣本,對應的某個類別特徵是:A A A A A B B B B B,則A轉換為greedy ts的形式,則要先看A對應的標籤y是啥情況,假設A A A A A對應的標籤為 1 1 1 0 1,則按照上面的公式為 (1*1+1*1+1*1+1*0+1*1)/5=0.8
顯然這種方式容易過擬合於訓練集,極端的例子是,還是以上面為例子,假設某個類別特徵是:A B C D E F G H I J,其標籤對應的為:1 0 1 0 1 1 1 0 0 1,則根據上面的公式我們計算的結果為:1 0 1 0 1 1 1 0 0 1,顯然發生了標籤泄露了,因此這種編碼方式基本不用了,而是採用了後面的改進版本的target encoding方式(也可以稱為target statistics)

這個是目前實現最多的target encoding的定義方式,可以說基本上都是按照這個公式定義的,有的地方這裡的p直接設置為全部標籤的均值,這裡的參數alpha是一個用戶自定義的參數,用於調節先驗在最終的編碼結果中的貢獻程度。
然而這種方式仍舊會面臨著:

左邊代表訓練集右邊代表測試集,我們當然希望同一個類別在不同的數據集中能夠保持一致的與y之間的關聯關係,但是顯然很多時候訓練集和測試集的分布是存在一定差異的,因此使用target encoding會引入一定偏差。

其實這二類ts的方法我基本沒怎麼見到有人用過。
為了緩解 target encoding的偏差問題,出現了後來的mean encoding以及加入雜訊的target encoding,mean encoding引入了類似於集成的思想,在不同的原始數據的抽樣子集下計算target encoding值,然後平均。
catboost採用的order ts的方式,很奇怪的編碼方式。。。具體的可見:
馬東什麼:catboost完全指南
