新聞中心
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。

目前成都創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、浙江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
獨(dú)熱編碼(又稱虛擬變量)是一種將分類變量轉(zhuǎn)換為若干二進(jìn)制列的方法,其中1表示存在屬于該類別的行。顯然,從機(jī)器學(xué)習(xí)的角度來看,它并不適合對(duì)分類變量進(jìn)行編碼。
很明顯,它增加了大量的維度,但通常來說,維數(shù)越小越好。例如,如果設(shè)置一個(gè)列代表美國(guó)的州(例如加利福尼亞州、紐約州)的話,那么獨(dú)熱編碼方案將會(huì)多出50個(gè)維度。
這樣做不僅會(huì)為數(shù)據(jù)集增加大量維度,而且實(shí)際上并沒有太多信息——大量0中零散分布著幾個(gè)1。這使得優(yōu)化難以進(jìn)行,對(duì)于神經(jīng)網(wǎng)絡(luò)來說尤其如此,其優(yōu)化器在大量的空白維度中很容易進(jìn)入錯(cuò)誤的空間。
更糟糕的是,每個(gè)信息稀疏列之間都具有線性關(guān)系。這意味著一個(gè)變量可以很容易地使用其他變量進(jìn)行預(yù)測(cè),從而可能導(dǎo)致高維的并行性和多重共線性問題。
最佳數(shù)據(jù)集包含了信息具有獨(dú)立價(jià)值的特征,而獨(dú)熱編碼可創(chuàng)建一個(gè)完全不同的環(huán)境。當(dāng)然,如果只有三個(gè)或甚至四個(gè)類,那么獨(dú)熱編碼可能并不是一個(gè)糟糕的選擇。不過根據(jù)數(shù)據(jù)集的相對(duì)大小,其他的替代方法有可能值得一探。
目標(biāo)編碼可以有效表示分類列,而且僅占用一個(gè)特征空間。它也稱為均值編碼,該列中的每個(gè)值都被該類別的平均目標(biāo)值代替。這樣可以更直接地表示分類變量和目標(biāo)變量之間的關(guān)系,并且這也是一種非常流行的技術(shù)(尤其是在Kaggle比賽中)。
這種編碼方法有一些缺點(diǎn)。首先,它使模型更難以學(xué)習(xí)均值編碼變量和另一個(gè)變量之間的關(guān)系。它只能根據(jù)它與目標(biāo)的關(guān)系在在列中繪制相似性,這有利有弊。
這種編碼方法對(duì)y變量非常敏感,會(huì)影響模型提取編碼信息的能力。
由于該類別的每個(gè)值都被相同的數(shù)值替換,因此該模型可能會(huì)趨于過擬合它所看到的編碼值(例如,將0.8與完全不同于0.79的值相關(guān)聯(lián))。這是將連續(xù)規(guī)模上的值視為嚴(yán)重重復(fù)的類處理的結(jié)果。因此,需要仔細(xì)監(jiān)控y變量是否存在異常值。
為實(shí)現(xiàn)這一目的,可以使用category_encoders庫(kù)。目標(biāo)編碼器是一種受監(jiān)督的方法,因此需要X和y訓(xùn)練集。
- from category_encoders importTargetEncoder
- enc =TargetEncoder(cols=['Name_of_col','Another_name'])
- training_set = enc.fit_transform(X_train, y_train)
留一法編碼(Leave-one-out encoding)試圖通過計(jì)算平均值(不包括當(dāng)前行值)來彌補(bǔ)對(duì)y變量和值多樣性的依賴。這使異常值的影響趨于平穩(wěn),并創(chuàng)建了更多不同的編碼值。
模型不僅為每個(gè)編碼的類提供了相同的值,還為其提供了一個(gè)范圍,可以更好地進(jìn)行泛化??梢韵裢R粯邮褂肔eaveOneOutEncoder在category_encoders庫(kù)中執(zhí)行實(shí)現(xiàn)。
- from category_encoders importLeaveOneOutEncoder
- enc =LeaveOneOutEncoder(cols=['Name_of_col','Another_name'])
- training_set = enc.fit_transform(X_train, y_train)
實(shí)現(xiàn)類似效果的另一種策略是將正態(tài)分布的噪聲添加到編碼分?jǐn)?shù)中,其中標(biāo)準(zhǔn)偏差是可以調(diào)整的參數(shù)。
貝葉斯目標(biāo)編碼(Bayesiantarget encoding)是一種將目標(biāo)用作編碼方法的數(shù)學(xué)方法。僅使用均值可能是一種欺騙性度量,因此貝葉斯目標(biāo)編碼試圖結(jié)合使用其他統(tǒng)計(jì)量來衡量目標(biāo)變量的分布,例如其方差或偏度(highermoments)。
然后,通過貝葉斯模型合并這些分布的屬性,該模型能夠產(chǎn)生一種編碼,這種編碼可以更清楚類別目標(biāo)分布的各個(gè)方面。但是,結(jié)果卻難以解釋。
證據(jù)權(quán)重(WoE)是對(duì)分類自變量與因變量之間關(guān)系的另一種細(xì)微看法。WoE源自信用評(píng)分行業(yè),用于衡量拖欠或償還貸款的客戶之間的差別。證據(jù)權(quán)重的數(shù)學(xué)定義是優(yōu)勢(shì)比的自然對(duì)數(shù),或:
- ln (% of non events / % of events)
WoE越高,事件發(fā)生的可能性就越大?!癗on-events”是指那些不屬于某個(gè)類的事件所占的百分比。使用證據(jù)權(quán)重與因變量建立單調(diào)(永不停止朝一個(gè)方向發(fā)展)關(guān)系,并在邏輯尺度范圍內(nèi)確保類別。WoE是“信息價(jià)值”指標(biāo)的關(guān)鍵組成部分,該指標(biāo)用于衡量功能如何為預(yù)測(cè)提供信息。
- from category_encoders importWOEEncoder
- enc =WOEEncoder(cols=['Name_of_col','Another_name'])
- training_set = enc.fit_transform(X_train, y_train)
這些方法是監(jiān)督編碼器,或者是考慮目標(biāo)變量的編碼方法,因此在預(yù)測(cè)任務(wù)中它們通常是更有效的編碼器。但是,當(dāng)需要執(zhí)行無監(jiān)督分析時(shí),就并不一定是這種情況了。
非線性PCA(Nonlinear PCA)是一種處理主成分分析的方法,可以通過使用分類量化來處理分類變量。這樣可以找到類別的最佳數(shù)值,從而使常規(guī)PCA的性能(解釋的方差)最大化。
下次遇到分類變量別再進(jìn)行獨(dú)熱編碼啦,這么多種方法任君挑選!
網(wǎng)站標(biāo)題:別再對(duì)分類變量進(jìn)行獨(dú)熱編碼!你還有更好的選擇
URL鏈接:http://fisionsoft.com.cn/article/codohhc.html


咨詢
建站咨詢
