数据预处理----独热编码(One-Hot Encoding)

      在机器学习任务中,特征并不总是连续值,比如性别、国籍、婚姻情况,即使将这些将这些特征转化为数字,也不能直接用于机器用于分类器中,分类器默认所有特征是连续的,这些离散值会被直接当做连续型变量处理。

**Case**——假定已知三个feature,三个feature分别取值如下:

feature1=[“male”, “female”]   表示为[0, 1]
feature2=[“from Europe”, “from US”, “from Asia”]  表示为[0, 1, 2]
feature3=[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]   表示为[0, 1, 2, 3]


假设有下面两组数据:
[“male”, “from US”, “uses Internet Explorer”] is marked为[0, 1, 3]
[“female”, “from Asia”, “uses Chrome”] is marked为[1, 2, 1]

为了解决上述问题,有一种可能的解决办法为独热编码:
独热编码即One-Hot码,又称一位有效码;该方法是使用N位状态寄存器表达N个状态,且只有一位有效;

例如:

自然状态码为:000, 001, 010, 011, 100, 101
独热编码为:  000001,000010,000100,001000,010000,100000

可以这样理解,对于某个特征有m个取值,转换为独热编码后,就变成了m个二元特征,并且这些特征互斥,每次只有一个激活。

Q:现在将[0, 1, 3]进行独热编码:

A:  则样本中特征变量取值最多的为feature3,所以独热编码应写成4个二元特征,将未取到的特征记为0000;则对于样本中第一个变量feature1,则为[0001,0000];
依此类推,最终独热编码可以表示为:[0001, 0000, 0000, 0010, 0000, 0000, 0000, 0000, 1000]
可以简写为:[1., 0., 0., 1., 0., 0., 0., 0., 1.]

则我们可以用sklearn计算某样本变量的独热编码

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])   #4个样本
enc.transform([[0, 1, 3]]).toarray()

输出结果:array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])





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