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)
代码运行结果如下: