OneHotEncoder 和 get_dummies

OneHotEncoder和get_dummies都是將分類(lèi)變量(categorical features)轉(zhuǎn)化為數(shù)字變量(numerical features)的方法。

為什么要轉(zhuǎn)化為數(shù)字變量呢? 因?yàn)榇蟛糠值臋C(jī)器學(xué)習(xí)方法需要所有特征/變量(features/variables)都是數(shù)值型的。樹(shù)相關(guān)的機(jī)器學(xué)習(xí)方法可以直接處理分類(lèi)變量。

OneHotEncoder 和 get_dummies 的不同之處:

1. OneHotEncoder 來(lái)自于sklearn。 導(dǎo)包:from sklearn.preprocessing import OneHotEncoder

? ? get_dummies來(lái)自于Pandas。 導(dǎo)包和使用:import Pandas as pd

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?pd.get_dummies(df)

2. 此處區(qū)別存在,當(dāng)sklearn的版本0.20.0在以下:

????OneHotEncoder?不能直接處理string類(lèi)型的分類(lèi)變量,如果是nominal類(lèi)型的分類(lèi)變量需要將分類(lèi)變量映射為integer, 可以用字典,或者使用LabelEncoder。

? ? 如果是ordinal類(lèi)型的分類(lèi)變量,只需LabelEncoder就可(不需要繼續(xù)使用OneHotEncoder)

但是sklearn 0.20.0 之后的版本,OneHotEncoder可以直接處理string類(lèi)型的分類(lèi)變量。

下面是一個(gè)當(dāng)sklearn版本是0.20.2的OneHotEncoder例子:

下面是使用get_dummies的例子:

對(duì)于機(jī)器學(xué)習(xí),建議使用OneHotEncoder。因?yàn)間et_dummies容易使用,可以用于分析類(lèi)的工作。

為什么推薦使用OneHotEncoder?

舉個(gè)例子:如果訓(xùn)練數(shù)據(jù)“顏色” 這個(gè)變量有“紅”,“黃”兩個(gè)值,但是在測(cè)試數(shù)據(jù)的“顏色”變量除了“紅”,“黃”還有“藍(lán)”。這個(gè)時(shí)候使用get_dummies轉(zhuǎn)化訓(xùn)練數(shù)據(jù)會(huì)生成新的column:紅,黃。之后用這個(gè)數(shù)據(jù)訓(xùn)練模型。同時(shí)使用get_dummies轉(zhuǎn)化測(cè)試數(shù)據(jù)會(huì)生成新的column:紅,黃,藍(lán)。之后應(yīng)用訓(xùn)練好的模型進(jìn)行測(cè)試數(shù)據(jù)的預(yù)測(cè)。這時(shí)就會(huì)出現(xiàn)錯(cuò)誤。因?yàn)樵谀P陀?xùn)練的過(guò)程并沒(méi)有“藍(lán)”這一列。

但是使用OneHotEncoder(handle_unknown="ignore")就可以解決上述問(wèn)題。

例子如下:

測(cè)試數(shù)據(jù)存在“THURSDAY”和"FRIDAY"是訓(xùn)練數(shù)據(jù)中不存在的,OneHotEncoder將其轉(zhuǎn)化為都是0的array。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容