機器學習中的目標編碼

機器學習中的目標編碼

目標編碼(Target Encoding)也被稱為似然編碼(likelihood encoding)或平均數編碼(mean encoding)。它是從現有特徵和目標變量中創建一個新特徵。

讓我們通過幾個小例子來理解這個概念。

示例1:二元分類任務

我們有一個名為data_df的Pandas DataFrame,它包含如下數據。

機器學習中的目標編碼

特徵2是我們想要在目標的幫助下進行編碼的分類變量。

因為,如果特性2的值是“A”,我們在相應的目標列中有4個1和1個0。值“A”的平均數編碼為4/5 = 0.8。

類似地,特徵2為“B”的平均數編碼是2/3 = 0.667。

我們可以用下面的代碼為data_df中的數據創建平均數編碼

mean_encoding = data_df.groupby(['Feature-2']).agg({'Target':['mean']}).reset_index()

data_df = data_df.merge(mean_encoding,on='Feature-2',how='left')

這裡(Target,mean)是新編碼的特徵

機器學習中的目標編碼

示例2:迴歸任務

讓我們看一下Target是一個連續值的例子。我們的新DataFrame數據如下:

機器學習中的目標編碼

與第一個示例相同,Feature-2是我們想要在Target的幫助下編碼的分類變量。

由於Target是連續的,因此我們可以更靈活地生成新的目標編碼功能。例如,我們可以採用均值,模式,標準差或百分位數來創建新特徵。

讓我們使用Feature-2中每個值的Target值的標準偏差來創建一個新特徵。

std_encoding=data.groupby(['Feature-2']).agg({'Target':['std']}).reset_index()

data_df = data_df.merge(std_encoding,on='Feature-2',how='left')

這裡產生的新特徵是(Target,std)

機器學習中的目標編碼

這種特徵編碼的思想也可以擴展到多類分類。特別地,對於基於樹的方法,該方法似乎最有效,因為數據獲得關於編碼的分類特徵的其他值的結構的附加信息。

注意事項

在使用這些編碼技術時,有一些事情需要注意,因為我們不希望目標變量洩漏出現在新的編碼特徵中。

  • 如果在訓練和驗證數據分離之前執行了目標編碼,那麼它可能僅僅是與驗證數據相匹配,結果可能不可靠。因此,應該在訓練和驗證數據分離後進行編碼。
  • 這種方法在特性可能具有數據中罕見的值的情況下可能會失敗。

我們可以使用一些正則化方法來克服目標編碼中的缺陷。

通過使用目標編碼,我們可以超越one-hot編碼,將分類變量輸入到機器學習模型中。


分享到:


相關文章: