溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

為什么不對分類變量進(jìn)行獨熱編碼

發(fā)布時間:2021-10-27 10:51:05 來源:億速云 閱讀:149 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“為什么不對分類變量進(jìn)行獨熱編碼”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“為什么不對分類變量進(jìn)行獨熱編碼”吧!

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

為什么不對分類變量進(jìn)行獨熱編碼

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

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

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

為什么不對分類變量進(jìn)行獨熱編碼

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

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

為什么不對分類變量進(jìn)行獨熱編碼

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

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

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

為實現(xiàn)這一目的,可以使用category_encoders庫。目標(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)試圖通過計算平均值(不包括當(dāng)前行值)來彌補(bǔ)對y變量和值多樣性的依賴。這使異常值的影響趨于平穩(wěn),并創(chuàng)建了更多不同的編碼值。

為什么不對分類變量進(jìn)行獨熱編碼

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

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

實現(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)計量來衡量目標(biāo)變量的分布,例如其方差或偏度(highermoments)。

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

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

ln (% of non events / % of events)

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

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ù)測任務(wù)中它們通常是更有效的編碼器。但是,當(dāng)需要執(zhí)行無監(jiān)督分析時,就并不一定是這種情況了。

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

為什么不對分類變量進(jìn)行獨熱編碼

到此,相信大家對“為什么不對分類變量進(jìn)行獨熱編碼”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI