自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

別再對分類變量進行獨熱編碼!你還有更好的選擇

開發(fā) 前端
獨熱編碼(又稱虛擬變量)是一種將分類變量轉換為若干二進制列的方法,其中1表示存在屬于該類別的行。顯然,從機器學習的角度來看,它并不適合對分類變量進行編碼。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

[[343458]]

獨熱編碼(又稱虛擬變量)是一種將分類變量轉換為若干二進制列的方法,其中1表示存在屬于該類別的行。顯然,從機器學習的角度來看,它并不適合對分類變量進行編碼。

很明顯,它增加了大量的維度,但通常來說,維數(shù)越小越好。例如,如果設置一個列代表美國的州(例如加利福尼亞州、紐約州)的話,那么獨熱編碼方案將會多出50個維度。

這樣做不僅會為數(shù)據(jù)集增加大量維度,而且實際上并沒有太多信息——大量0中零散分布著幾個1。這使得優(yōu)化難以進行,對于神經(jīng)網(wǎng)絡來說尤其如此,其優(yōu)化器在大量的空白維度中很容易進入錯誤的空間。

更糟糕的是,每個信息稀疏列之間都具有線性關系。這意味著一個變量可以很容易地使用其他變量進行預測,從而可能導致高維的并行性和多重共線性問題。

別再對分類變量進行獨熱編碼!你還有更好的選擇

最佳數(shù)據(jù)集包含了信息具有獨立價值的特征,而獨熱編碼可創(chuàng)建一個完全不同的環(huán)境。當然,如果只有三個或甚至四個類,那么獨熱編碼可能并不是一個糟糕的選擇。不過根據(jù)數(shù)據(jù)集的相對大小,其他的替代方法有可能值得一探。

目標編碼可以有效表示分類列,而且僅占用一個特征空間。它也稱為均值編碼,該列中的每個值都被該類別的平均目標值代替。這樣可以更直接地表示分類變量和目標變量之間的關系,并且這也是一種非常流行的技術(尤其是在Kaggle比賽中)。

這種編碼方法有一些缺點。首先,它使模型更難以學習均值編碼變量和另一個變量之間的關系。它只能根據(jù)它與目標的關系在在列中繪制相似性,這有利有弊。

這種編碼方法對y變量非常敏感,會影響模型提取編碼信息的能力。

由于該類別的每個值都被相同的數(shù)值替換,因此該模型可能會趨于過擬合它所看到的編碼值(例如,將0.8與完全不同于0.79的值相關聯(lián))。這是將連續(xù)規(guī)模上的值視為嚴重重復的類處理的結果。因此,需要仔細監(jiān)控y變量是否存在異常值。

為實現(xiàn)這一目的,可以使用category_encoders庫。目標編碼器是一種受監(jiān)督的方法,因此需要X和y訓練集。

  1. from category_encoders importTargetEncoder 
  2.                   enc =TargetEncoder(cols=['Name_of_col','Another_name']) 
  3.                   training_set = enc.fit_transform(X_train, y_train) 

留一法編碼(Leave-one-out encoding)試圖通過計算平均值(不包括當前行值)來彌補對y變量和值多樣性的依賴。這使異常值的影響趨于平穩(wěn),并創(chuàng)建了更多不同的編碼值。

別再對分類變量進行獨熱編碼!你還有更好的選擇

模型不僅為每個編碼的類提供了相同的值,還為其提供了一個范圍,可以更好地進行泛化??梢韵裢R粯邮褂肔eaveOneOutEncoder在category_encoders庫中執(zhí)行實現(xiàn)。

  1. from category_encoders importLeaveOneOutEncoder 
  2.                    enc =LeaveOneOutEncoder(cols=['Name_of_col','Another_name']) 
  3.                    training_set = enc.fit_transform(X_train, y_train) 

實現(xiàn)類似效果的另一種策略是將正態(tài)分布的噪聲添加到編碼分數(shù)中,其中標準偏差是可以調(diào)整的參數(shù)。

貝葉斯目標編碼(Bayesiantarget encoding)是一種將目標用作編碼方法的數(shù)學方法。僅使用均值可能是一種欺騙性度量,因此貝葉斯目標編碼試圖結合使用其他統(tǒng)計量來衡量目標變量的分布,例如其方差或偏度(highermoments)。

然后,通過貝葉斯模型合并這些分布的屬性,該模型能夠產(chǎn)生一種編碼,這種編碼可以更清楚類別目標分布的各個方面。但是,結果卻難以解釋。

證據(jù)權重(WoE)是對分類自變量與因變量之間關系的另一種細微看法。WoE源自信用評分行業(yè),用于衡量拖欠或償還貸款的客戶之間的差別。證據(jù)權重的數(shù)學定義是優(yōu)勢比的自然對數(shù),或:

  1. ln (% of non events / % of events) 

WoE越高,事件發(fā)生的可能性就越大。“Non-events”是指那些不屬于某個類的事件所占的百分比。使用證據(jù)權重與因變量建立單調(diào)(永不停止朝一個方向發(fā)展)關系,并在邏輯尺度范圍內(nèi)確保類別。WoE是“信息價值”指標的關鍵組成部分,該指標用于衡量功能如何為預測提供信息。

  1. from category_encoders importWOEEncoder 
  2.                   enc =WOEEncoder(cols=['Name_of_col','Another_name']) 
  3.                   training_set = enc.fit_transform(X_train, y_train) 

這些方法是監(jiān)督編碼器,或者是考慮目標變量的編碼方法,因此在預測任務中它們通常是更有效的編碼器。但是,當需要執(zhí)行無監(jiān)督分析時,就并不一定是這種情況了。

非線性PCA(Nonlinear PCA)是一種處理主成分分析的方法,可以通過使用分類量化來處理分類變量。這樣可以找到類別的最佳數(shù)值,從而使常規(guī)PCA的性能(解釋的方差)最大化。

別再對分類變量進行獨熱編碼!你還有更好的選擇

下次遇到分類變量別再進行獨熱編碼啦,這么多種方法任君挑選!

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2020-12-30 06:19:15

編碼分類特征數(shù)字特征

2020-07-20 12:43:31

Go變量命名

2023-09-20 00:33:23

SQL數(shù)據(jù)庫

2020-05-19 17:09:33

Pandas大數(shù)據(jù)數(shù)據(jù)分析

2011-03-25 09:08:49

C#

2015-09-28 14:27:12

硬編默認選擇

2016-12-02 17:14:46

2020-04-02 10:36:43

JS代碼函數(shù)

2022-11-06 15:35:53

機器學習算法編碼

2020-09-16 14:46:37

開發(fā)技能代碼

2022-04-20 15:10:55

pandas編碼函數(shù)

2022-07-11 13:30:08

Pandas數(shù)據(jù)編碼代碼

2025-04-09 00:00:00

2024-07-25 18:20:03

2010-01-15 18:06:20

C++引用

2021-03-15 10:23:44

IT支出技術投資CIO

2010-02-02 13:59:11

Python編寫

2016-01-26 11:23:18

2021-10-15 09:53:12

工具

2018-11-19 10:30:39

du命令Linux
點贊
收藏

51CTO技術棧公眾號