偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

大數(shù)據(jù) 數(shù)據(jù)分析
分類編碼是將分類列轉(zhuǎn)換為一個(gè)(或多個(gè))數(shù)字列的過(guò)程。但是,盡管有分類編碼,但數(shù)據(jù)科學(xué)從業(yè)人員很容易忽略分類編碼。

"您知道哪個(gè)梯度提升?"

" Xgboost,LightGBM,Catboost,HistGradient。"

"您知道哪種分類編碼?"

"One Hot"

在數(shù)據(jù)科學(xué)采訪中聽(tīng)到這樣的對(duì)話我不會(huì)感到驚訝。盡管如此,這還是很驚人的,因?yàn)橹挥幸恍〔糠謹(jǐn)?shù)據(jù)科學(xué)項(xiàng)目涉及機(jī)器學(xué)習(xí),而實(shí)際上所有這些項(xiàng)目都涉及一些分類數(shù)據(jù)。

分類編碼是將分類列轉(zhuǎn)換為一個(gè)(或多個(gè))數(shù)字列的過(guò)程。

這是必要的,因?yàn)橛?jì)算機(jī)更容易處理數(shù)字而不是字符串。這是為什么?因?yàn)槭褂脭?shù)字很容易找到關(guān)聯(lián)(例如"更大","更小","兩倍","一半")。而給定字符串時(shí),計(jì)算機(jī)只能說(shuō)"相等"還是"不同"。

但是,盡管有分類編碼,但數(shù)據(jù)科學(xué)從業(yè)人員很容易忽略分類編碼。

分類編碼是一個(gè)令人驚訝地被低估的話題。

這就是為什么我決定加深對(duì)編碼算法的了解。我從一個(gè)名為" category_encoders"的Python庫(kù)開(kāi)始(這是Github鏈接)。使用它很容易:

  1. !pip install category_encodersimport category_encoders as cece.OrdinalEncoder().fit_transform(x) 

這篇文章是庫(kù)中包含的17種編碼算法的演練。對(duì)于每種算法,我用幾行代碼提供了簡(jiǎn)短的解釋和Python實(shí)現(xiàn)。這樣做的目的不是要重新發(fā)明輪子,而是要了解算法是如何在后臺(tái)運(yùn)行的。畢竟,

"您不了解它,直到您可以對(duì)其進(jìn)行編碼"。

并非所有編碼均相等

我已經(jīng)根據(jù)其一些特征對(duì)17種編碼算法進(jìn)行了分類。由于數(shù)據(jù)科學(xué)家喜歡決策樹(shù),因此讓他們感到高興:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

以下是拆分所指的內(nèi)容:

  • 有監(jiān)督/無(wú)監(jiān)督:當(dāng)編碼僅基于分類列時(shí),則為無(wú)監(jiān)督。否則,如果編碼基于原始列和第二個(gè)(數(shù)字)列的某些功能,那么它將受到監(jiān)督。
  • 輸出維:分類列的編碼可能會(huì)產(chǎn)生一個(gè)數(shù)字列(輸出維= 1)或許多數(shù)字列(輸出維> 1)。
  • 映射:如果每個(gè)級(jí)別始終具有相同的輸出(無(wú)論是標(biāo)量(例如OrdinalEncoder)還是數(shù)組(例如OneHotEncoder)),則映射是唯一的。相反,如果"允許"同一級(jí)別具有不同的可能輸出,則映射不是唯一的。

10分鐘內(nèi)17種分類編碼算法

1. OrdinalEncoder

每個(gè)級(jí)別都映射到一個(gè)從1到L的整數(shù)(其中L是級(jí)別數(shù))。在這種情況下,我們使用字母順序,但是任何其他自定義順序也是可以接受的。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

您可能會(huì)認(rèn)為序數(shù)編碼是無(wú)意義的,尤其是在級(jí)別沒(méi)有固有順序的情況下。你是對(duì)的!實(shí)際上,它只是方便的一種表示形式,通常用于節(jié)省內(nèi)存或用作其他類型編碼的中間步驟。

2. CountEncoder

每個(gè)級(jí)別都映射到承載該級(jí)別的觀測(cè)數(shù)量。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

該編碼可以用作指示每個(gè)級(jí)別的"可信度"的指標(biāo)。例如,機(jī)器學(xué)習(xí)算法可以自動(dòng)決定僅考慮其級(jí)別高于某個(gè)閾值的級(jí)別所帶來(lái)的信息。

3. OneHotEncoder

卓越(最常用)的編碼算法。每個(gè)級(jí)別都映射到一個(gè)虛擬列(即0/1列),指示該級(jí)別是否由該行承載。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

這意味著,盡管您的輸入是單個(gè)列,但是您的輸出卻包含L列(原始列的每一級(jí)一個(gè))。這就是為什么要謹(jǐn)慎處理一鍵編碼的原因:您最終可能會(huì)得到一個(gè)比原始數(shù)據(jù)幀大得多的數(shù)據(jù)幀。

一次性對(duì)數(shù)據(jù)進(jìn)行熱編碼后,便可以使用任何預(yù)測(cè)算法。為了讓您一眼就能理解,我們對(duì)每個(gè)級(jí)別進(jìn)行一次觀察。假設(shè)我們已經(jīng)觀察到一個(gè)目標(biāo)變量y,其中包含每個(gè)人的收入(以千美元計(jì))。讓我們?cè)跀?shù)據(jù)上擬合線性回歸(OLS)。

為了使結(jié)果易于閱讀,我將OLS系數(shù)附加在桌子的側(cè)面。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

在單熱編碼的情況下,截距沒(méi)有特殊含義,并且將系數(shù)添加到截距中以獲得估計(jì)。在這種情況下,由于每個(gè)級(jí)別只有一個(gè)觀測(cè)值,因此通過(guò)將截距和系數(shù)相加,我們可以獲得y的精確值(沒(méi)有錯(cuò)誤)。

4. SumEncoder

最初的代碼看起來(lái)有些晦澀。但請(qǐng)放心:在這種情況下,了解編碼的獲取方式不是那么重要,而是如何使用它。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

SumEncoder(作為接下來(lái)的3個(gè)編碼器)屬于一個(gè)稱為"對(duì)比度編碼"的類。這些編碼設(shè)計(jì)用于回歸問(wèn)題時(shí)具有特定的行為。換句話說(shuō),如果希望回歸系數(shù)具有某些特定屬性,則可以使用這些編碼之一。

特別是,當(dāng)您希望回歸系數(shù)具有零和時(shí),將使用SumEncoder。如果我們采用與上段相同的數(shù)據(jù)并適合OLS,則可以得到以下結(jié)果:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

這次,截距對(duì)應(yīng)于y的平均值。此外,通過(guò)取最后一級(jí)的y并將其從截距(68-50)中減去,我們得到18,這與其余系數(shù)的總和(-15-5 + 2 = -18)正好相反。這正是我上面提到的求和編碼的屬性。

5. BackwardDifferenceEncoder

另一種對(duì)比編碼(如SumEncoder)。

該編碼器對(duì)于序數(shù)變量(即,其級(jí)別可以以有意義的方式進(jìn)行排序的變量)很有用。BackwardDifferenceEncoder旨在比較相鄰級(jí)別。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

假設(shè)您有一個(gè)普通變量(例如學(xué)歷),并且想知道它與數(shù)字變量(例如收入)之間的關(guān)系。比較目標(biāo)變量的每?jī)蓚€(gè)連續(xù)級(jí)別(例如,學(xué)士與高中,碩士與學(xué)士)可能很有趣。這就是BackwardDifferenceEncoder設(shè)計(jì)的目的。讓我們來(lái)看一個(gè)示例,上面的段落中的數(shù)據(jù)相同。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

截距與y的平均值重合。單身漢的系數(shù)為10,因?yàn)閱紊頋h的y比高中的高10,而碩士的系數(shù)等于7,因?yàn)閱紊頋h的y比高中的高7,依此類推。

6. HelmertEncoder

HelmertEncoder與BackwardDifferenceEncoder非常相似,但是不僅將其與上一個(gè)進(jìn)行比較,還將每個(gè)級(jí)別與所有先前的級(jí)別進(jìn)行比較。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

讓我們看看從OLS模型可以得到什么:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

PhD的系數(shù)為24,因?yàn)镻hD比先前水平68-((35 + 45 + 52)/ 3)= 24的平均值高24。相同的推理適用于所有級(jí)別。

7. 多項(xiàng)式編碼器

另一種對(duì)比編碼。

顧名思義,PolynomialEncoder旨在量化目標(biāo)變量相對(duì)于分類變量的線性,二次和三次行為。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

我知道你在想什么數(shù)字變量如何與非數(shù)字變量具有線性(或二次或三次)關(guān)系?這是基于以下假設(shè):基礎(chǔ)分類變量具有不僅可觀的而且均等間隔的級(jí)別。

因此,建議您僅在確信假設(shè)合理的情況下謹(jǐn)慎使用它。

8. BinaryEncoder

BinaryEncoder與OrdinalEncoder基本相同,唯一的區(qū)別是將整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),然后每個(gè)位置數(shù)字都進(jìn)行一次熱編碼。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

輸出由偽列組成(就像OneHotEncoder一樣),但是它導(dǎo)致單熱點(diǎn)的尺寸減少。

老實(shí)說(shuō),我不知道這種編碼的任何實(shí)際應(yīng)用(如果您愿意,請(qǐng)?jiān)谙旅姘l(fā)表評(píng)論!)。

9. BaseNEncoder

BaseNEncoder只是BinaryEncoder的概括。實(shí)際上,在BinaryEncoder中,數(shù)字以2為底,而在BaseNEncoder中,數(shù)字以n為底,n大于1。

讓我們看一個(gè)以base = 3為例的例子。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

老實(shí)說(shuō),我不知道這種編碼的任何實(shí)際應(yīng)用(如果您愿意,請(qǐng)?jiān)谙旅姘l(fā)表評(píng)論!)。

10. HashingEncoder

在HashingEncoder中,使用某種哈希算法(例如SHA-256)對(duì)每個(gè)原始級(jí)別進(jìn)行哈希處理。然后,將結(jié)果轉(zhuǎn)換為整數(shù),并采用該整數(shù)相對(duì)于某個(gè)(大)除數(shù)的模塊。這樣,我們將每個(gè)原始字符串映射到1到divisor-1之間的整數(shù)。最后,通過(guò)此過(guò)程獲得的整數(shù)是一熱編碼的。

我們來(lái)看一個(gè)output_dimension = 10的示例。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

哈希的基本屬性是所得整數(shù)均勻分布。因此,如果將除數(shù)足夠大,則不可能將兩個(gè)不同的字符串映射到相同的整數(shù)。為什么這樣有用?實(shí)際上,這有一個(gè)非常實(shí)用的應(yīng)用程序,稱為"哈希技巧"。

想象一下,您想使用Logistic回歸進(jìn)行電子郵件垃圾郵件分類。您可以通過(guò)對(duì)數(shù)據(jù)集中的所有單詞進(jìn)行一次熱編碼來(lái)做到這一點(diǎn)。主要缺點(diǎn)是您需要將映射存儲(chǔ)在單獨(dú)的字典中,并且模型尺寸會(huì)在出現(xiàn)新字符串時(shí)隨時(shí)更改。

使用哈希技巧可以輕松解決這些問(wèn)題,因?yàn)橥ㄟ^(guò)對(duì)輸入進(jìn)行哈希處理,您不再需要字典,并且輸出尺寸是固定的(僅取決于您最初選擇的除數(shù))。而且,對(duì)于散列的屬性,您可以肯定的是,新字符串的編碼可能會(huì)與現(xiàn)有字符串不同。

11. TargetEncoder

假設(shè)您有兩個(gè)變量:一個(gè)類別(x)和一個(gè)數(shù)字(y)。假設(shè)您要將x轉(zhuǎn)換為數(shù)字變量。您可能希望使用y"攜帶"的信息。一個(gè)明顯的想法是對(duì)x的每個(gè)級(jí)別取y的平均值。在公式中:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

這是合理的,但是這種方法存在一個(gè)大問(wèn)題:某些小組可能太小或太不穩(wěn)定而無(wú)法可靠。許多監(jiān)督編碼通過(guò)選擇y的組均值和全局均值之間的中間方法來(lái)克服此問(wèn)題:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

其中w_i在0到1之間,具體取決于組平均值的"可信度"。

接下來(lái)的三種算法(TargetEncoder,MEstimateEncoder和JamesSteinEncoder)基于它們定義w_i的方式而有所不同。

在TargetEncoder中,權(quán)重取決于組的數(shù)字和稱為"平滑"的參數(shù)。當(dāng)平滑為0時(shí),我們僅依靠組均值。然后,隨著平滑度的增加,全局平均權(quán)重越來(lái)越大,從而導(dǎo)致更強(qiáng)的正則化。

讓我們看看結(jié)果如何隨著一些不同的平滑值而變化。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

12. MEstimateEncoder

MEstimateEncoder與TargetEncoder相似,但w_i取決于一個(gè)稱為" m"的參數(shù),該參數(shù)設(shè)置全局平均值應(yīng)按絕對(duì)值加權(quán)的大小。m很容易理解,因?yàn)樗梢钥醋魇嵌鄠€(gè)觀察值:如果水平儀上有m個(gè)觀察儀,則水平儀的均值和總體平均權(quán)重相同。

讓我們看看不同m值的結(jié)果如何變化:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

13. JamesSteinEncoder

TargetEncoder和MEstimateEncoder既取決于組數(shù)字,也取決于用戶設(shè)置的參數(shù)值(分別是平滑和m)。這不方便,因?yàn)樵O(shè)置這些權(quán)重是一項(xiàng)手動(dòng)任務(wù)。

下面是一個(gè)自然的問(wèn)題:是否有一種方法可以在不需要任何人工干預(yù)的情況下設(shè)置最佳w_i?JamesSteinEncoder嘗試以統(tǒng)計(jì)為基礎(chǔ)的方式執(zhí)行此操作。

直覺(jué)是,具有較高方差的組的均值應(yīng)被較少信任。因此,組方差越高,權(quán)重越低(如果您想了解更多有關(guān)公式的信息,我建議克里斯·賽義德(Chris Said)發(fā)表此帖子)。

我們來(lái)看一個(gè)數(shù)字示例:

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

JamesSteinEncoder具有兩個(gè)顯著優(yōu)點(diǎn):與最大似然估計(jì)器相比,它提供了更好的估計(jì),并且不需要任何參數(shù)設(shè)置。

14. GLMMEncoder

GLMMEncoder采用完全不同的方法?;旧希m合y上的線性混合效應(yīng)模型。這種方法利用了以下事實(shí):線性混合效應(yīng)模型是專為處理同類觀察組而設(shè)計(jì)的(在此也有詳細(xì)說(shuō)明)。因此,該想法是使模型不具有回歸變量(僅包含截距),并將級(jí)別用作組。

這樣,輸出就是截距和組的隨機(jī)效應(yīng)之和。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

15. WOEEncoder

WOEEncoder(代表"證據(jù)權(quán)重"編碼器)只能用于二進(jìn)制目標(biāo)變量,即級(jí)別為0/1的目標(biāo)變量。

證據(jù)權(quán)重背后的想法是,您有兩種分布:

  • 1的分布(每組1個(gè)的數(shù)量/所有y中1的數(shù)量)
  • 0的分布(每個(gè)組中的0個(gè)數(shù)/所有y中的0個(gè)數(shù))

該算法的核心是將1s的分布除以0s的分布(對(duì)于每個(gè)組)。當(dāng)然,該值越高,我們?cè)接行判脑摻M"偏向" 1,反之亦然。然后,取該值的對(duì)數(shù)。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

如您所見(jiàn),由于公式中存在對(duì)數(shù),因此無(wú)法直接解釋輸出。但是,它可以很好地用作機(jī)器學(xué)習(xí)的預(yù)處理步驟。

16. LeaveOneOutEncoder

到目前為止,所有15個(gè)編碼器都具有唯一的映射。

但是,如果您打算將編碼用作預(yù)測(cè)模型的輸入(例如,梯度增強(qiáng)),則可能會(huì)出現(xiàn)問(wèn)題。實(shí)際上,假設(shè)您使用TargetEncoder。這意味著您將在X_train中引入有關(guān)y_train的信息,這可能會(huì)導(dǎo)致嚴(yán)重的過(guò)度擬合風(fēng)險(xiǎn)。

關(guān)鍵是:如何在限制過(guò)度擬合風(fēng)險(xiǎn)的同時(shí)保持監(jiān)督編碼?LeaveOneOutEncoder提供了一個(gè)出色的解決方案。它執(zhí)行原始目標(biāo)編碼,但是對(duì)于每一行,它不考慮對(duì)該行觀察到的y值。這樣,避免了行泄漏。

除了獨(dú)熱編碼,你需要了解將分類特征轉(zhuǎn)換為數(shù)字特征的17種方法

> [Image by Author]

17. CatBoostEncoder

CatBoost是一種梯度增強(qiáng)算法(例如XGBoost或LightGBM),在各種問(wèn)題上都表現(xiàn)得非常出色。此處對(duì)編碼算法進(jìn)行了詳細(xì)說(shuō)明(我們的實(shí)現(xiàn)略有簡(jiǎn)化,但是對(duì)于掌握概念非常有用)。

CatboostEncoder的工作原理基本上與LeaveOneOutEncoder相似,但是遵循一種在線方法。

但是,如何在離線設(shè)置中模擬在線行為?假設(shè)您有一張桌子。然后,在桌子中間的某處劃一排。CatBoost的行為是假裝當(dāng)前行上方的行先前已被及時(shí)觀察到,而下方行尚未被觀察到(即將來(lái)會(huì)被觀察到)。然后,該算法僅根據(jù)已經(jīng)觀察到的行進(jìn)行留一法編碼。

> [Image by Author]

這似乎很荒謬。為什么丟掉一些有用的信息?您可以將其視為對(duì)輸出進(jìn)行隨機(jī)化的更極端嘗試(即減少過(guò)度擬合)。

您可以在此Github筆記本中找到帖子(以及更多內(nèi)容)中的所有代碼。

感謝您的閱讀!我希望您發(fā)現(xiàn)這篇文章有用。

 

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2022-08-28 23:48:20

機(jī)器學(xué)習(xí)線性回歸數(shù)據(jù)

2021-11-16 19:12:16

網(wǎng)絡(luò)安全概念信息安全

2021-01-26 01:03:36

云原生工具云原生

2012-06-27 09:11:47

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2021-05-06 08:00:00

人工智能神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2020-09-23 13:44:26

分類變量獨(dú)熱編碼編碼

2022-11-06 15:35:53

機(jī)器學(xué)習(xí)算法編碼

2015-09-17 09:36:46

Chrome改變

2019-07-30 12:05:20

數(shù)據(jù)科學(xué)采樣算法

2022-02-22 23:39:15

JavaScript編程語(yǔ)言Web

2020-04-23 11:03:09

前端語(yǔ)言開(kāi)發(fā)

2020-10-13 06:56:19

JavaScript異常類型開(kāi)發(fā)

2022-01-04 19:28:05

VMware云端虛擬化

2018-07-13 06:45:55

2016-11-01 16:41:08

直通網(wǎng)線連接端口傳輸數(shù)據(jù)

2022-03-18 12:46:56

Go 語(yǔ)言編程語(yǔ)言

2021-02-24 11:13:28

網(wǎng)絡(luò)網(wǎng)絡(luò)通信互聯(lián)網(wǎng)

2020-09-23 13:40:01

信用卡欺詐網(wǎng)絡(luò)釣魚(yú)攻擊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)