最细的独热编码(One-hot)讲解

One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效,One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。干货如下:
例如:
性别特征:[“男”,“女”]------>二进制表示[01,10]
动物种类:[“猫”,“小狗”,“仓鼠”]----->二级制表示[001,010,100]
国家种类:[“中国”,“新加坡”,“英国”,“法国”]----->二进制表示[0001,0010,0100,1000]
上述表示的数据都是离散的为什么这么说呢,例如,猫和小狗,猫和仓鼠的欧式距离是相同的,没有什么区分。
下面有两种One-hot的表示方法:
第一种:用Python中的sklearn. preprocessing.OneHotEncoder()。
最细的独热编码(One-hot)讲解
这个fit中,取每个数组中第一个元素取值分别为:1,0,1,0.最大为1,种类为0,1,即用两位二进制俩表示即可,故value值为2,同样取每个数组中第二个元素得到:0,1,0,2,最大为2,种类为0,1,2,故得到value为3,依次得到第三个value=4.
最细的独热编码(One-hot)讲解
enc.feature_indices_为特征索引,例子中value值为(2,3,4),而特征索引从0开始,到2的位置为第一个,到2+3=5的位置为第二个,到2+3+4的位置为第三个,索引为array([0,2,5,9])
最细的独热编码(One-hot)讲解
enc.transform就是将[0,1,1]这组特征转换成One-hot编码,toarray()则是转成数组形式。
[0,1,1]
第一个元素是0,由于之前的fit的第一个维度为2,故为10,表示"女"
第二个元素是1,由于之前的fit的第二个维度为3,故为010,表示为"小狗"
第三个元素是1,由于之前的fit的第三个维度为4,故为0100,表示为"英国"

第二种为:利用pandas实现One-hot
最细的独热编码(One-hot)讲解
上述图中已经注释得很清楚了,就不再单独解释了。
当然,用pandas时,经常会用到get_dummies函数,如下:
最细的独热编码(One-hot)讲解
可以对指定列进行get_dummies:
最细的独热编码(One-hot)讲解