one-hot編碼和啞變量(dummy)編碼

1.One-Hot編碼和啞變量(Dummy Variable)編碼

one-hot編碼和啞變量編碼得到的結果很相似。舉個栗子:

  feature1 One-Hot result Dummy result
sample1 1 0,0,1 0,1
sample2 2 0,1,0 1,0
sample3 3 1,0,0 0,0
sample4 1 0,0,1 0,1

這兩種編碼的區別和聯繫

  • One-Hot編碼和啞變量編碼都只能對離散型變量進行編碼。
  • One-Hot編碼之後生成的新特徵數等於對應特徵的不同種類取值個數,feature1中共有3種不同的取值,One-Hot編碼之後生成的新特徵數就是3。而啞變量編碼之後生成的新特徵數比對應特徵的取值個數少1個。
  • One-Hot編碼之所以叫One-Hot編碼,是因爲每個取值對應的編碼中有且只有一個是1,其餘都是0。而啞變量編碼允許不出現1。
  • One-Hot編碼形成的新特徵都是二值型特徵,比如,上述One-Hot編碼形成的三個新維度的意義爲:feature1是否爲3,feature1是否爲2,feature1是否爲1;啞變量編碼在這一點上與One-Hot類似,只不過當編碼全爲0是表示 feature1既不是1也不是2,這種情況下默認feature1爲3。

2.Python代碼實現

因爲sklearn及pandas等第三方包中已經加入了這些方法,所以這裏直接使用第三方包實現。

from sklearn.preprocessing import OneHotEncoder
import pandas as pd
df = pd.DataFrame([  
            ['green' , 'A'],   
            ['red'   , 'B'],   
            ['blue'  , 'A']])  
df.columns = ['color',  'class'] 
#one-hot編碼
onehot=OneHotEncoder(sparse=False)
data=onehot.fit_transform(df[['color']])
print("one-hot編碼結果如下:")
print(data)
#啞變量編碼
#pd.get_dummies()方法即可以用於產生One-Hot編碼,也可以用於產生啞變量編碼
#當drop_first=True時爲啞變量編碼,當爲False時爲One-Hot編碼
#啞變量編碼是將One-Hot編碼的第一列結果去掉即可。
data=pd.get_dummies(df['color'],drop_first=True)
print("啞變量編碼結果如下:")
print(data)

代碼運行結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章