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)
代碼運行結果如下: