背景
某些數(shù)據(jù)集的特征并不是連續(xù)的數(shù)值躬翁,而是離散的字符串怒见。而用基于數(shù)學(xué)運(yùn)算的機(jī)器學(xué)習(xí)方法纳本,無法處理既绕。這時(shí),需要換一種方式來表示數(shù)據(jù)袋狞。對(duì)于某個(gè)特定應(yīng)用來說焚辅,如何找到最佳數(shù)據(jù)表示,這個(gè)問題被稱為特征工程硕并。
如果用回歸進(jìn)行分類法焰,公式為:
?= w[0] * x[0] + w[1] * x[1] + … + w[p] * x[p] + b > 0
其中 w[i] 和 b 是從訓(xùn)練集中學(xué)到的系數(shù), x[i] 是輸入特征倔毙。當(dāng) x[i] 是數(shù)字時(shí)這個(gè)公式才有意義埃仪,但如果 x[2] 是 "Masters" 或 "Bachelors" 的話,這個(gè)公式則沒有意義陕赃。顯然卵蛉,在應(yīng)用 Logistic 回歸時(shí),我們需要換一種方式來表示數(shù)據(jù)么库。
One-Hot編碼
到目前為止傻丝,表示分類變量最常用的方法就是使用 one-hot 編碼(one-hot-encoding)或N 取一編碼(one-out-of-N encoding), 也叫虛擬變量(dummy variable)诉儒。 虛擬變量背后的思想是將一個(gè)分類變量替換為一個(gè)或多個(gè)新特征葡缰,新特征取值為 0 和 1。
例如對(duì)work class進(jìn)行編碼,利用 4 個(gè)新特征對(duì)一個(gè)特征進(jìn)行編碼泛释。在機(jī)器學(xué)習(xí)算法中使用此數(shù)據(jù)時(shí)滤愕,我們將會(huì)刪除原始的 workclass 特征,僅保留 0-1 特征怜校。
需要用到的python方法
data_dummies = pd.get_dummies(data)
然后對(duì)變換后的數(shù)組進(jìn)行處理(分離特征和目標(biāo))
# 提取部分行列
features = data_dummies.loc[:, 'age':'occupation_ Transport-moving']
%用value方法將DataFrame轉(zhuǎn)成NumPy格式
X = features.values
y = data_dummies['income_ >50K'].values
print("X.shape: {} y.shape: {}".format(X.shape, y.shape))
小結(jié)
有時(shí)候數(shù)字特征也需要進(jìn)行One-Hot變換间影,因?yàn)槠浯淼氖请x散含義。在處理基因數(shù)據(jù)時(shí)茄茁,可以使用One-Hot編碼對(duì)數(shù)據(jù)進(jìn)行預(yù)處理魂贬。