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)

代码运行结果如下:

one-hot编码和哑变量(dummy)编码_第1张图片

你可能感兴趣的:(机器学习)