Python | One-Hot Encoding (独热编码)
独热编码(One-Hot Encoding),又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。即,只有一位是1,其余都是零值。独热编码 是利用0和1表示一些参数,使用N位状态寄存器来对N个状态进行编码。
地区特征:["北京","上海,"深圳"](这里N=3,三维数据):
北京 => 100
上海 => 010
深圳 => 001
在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的。而常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
使用独热编码(One-Hot Encoding),将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用独热编码(One-Hot Encoding),会让特征之间的距离计算更加合理。
OneHotEncoder
和get_dummies
都是将分类变量(categorical features)转化为数字变量(numerical features)的方法。
OneHotEncoder 来自于sklearn。
from sklearn.preprocessing import OneHotEncoder
get_dummies来自于Pandas。
import Pandas as pd
B = ['bird','cat','dog', 'cat', 'bird', 'bird']
d = {'categorical': B}
df = pd.DataFrame(d)
print(df)
categorical
0 bird
1 cat
2 dog
3 cat
4 bird
5 bird
dfDummies = pd.get_dummies(df['categorical'], prefix = 'category')
print(dfDummies)
category_bird category_cat category_dog
0 1 0 0
1 0 1 0
2 0 0 1
3 0 1 0
4 1 0 0
5 1 0 0
print(dfDummies.values)
[[1 0 0]
[0 1 0]
[0 0 1]
[0 1 0]
[1 0 0]
[1 0 0]]