One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每一个状态都由他独立的寄存器位,而且在任意时候只有一位有效。算法
One-Hot编码是分类变量做为二进制向量的表示。这首先要求将分类值映射到整数值。而后,每一个整数值被表示为二进制向量,除了整数的索引以外,它都是零值,它被标记为1。数组
听概念的话显得比较复杂,咱们来看一个例子。机器学习
假设咱们有一群学生,他们能够经过四个特征来形容,分别是:学习
举个例子,用上述四个特征来描述小明同窗,即“男生,初一,来自二中”,若是特征类别是有序的话,咱们可以用表示顺序的数组表示测试
即“男生,初一,来自一中” ==> [0,0,1]编码
可是这样的特征处理并不能直接放入机器学习算法中,由于类别之间是无序的spa
这时候就能够用独热编码的形式来表示了,咱们用采用N位状态寄存器来对N个状态进行编码,拿上面的例子来讲,就是:code
性别 | [“男”,“女”] | N=2 | 男:1 0orm 女:0 1blog |
年级 | [“初一”,“初二”,“初三”] | N=3 | 初一:1 0 0 初二:0 1 0 初三:0 0 1 |
学校 | [“一中”,“二中”,“三中”,“四中”] | N=4 | 一中:1 0 0 0 二中:0 1 0 0 三中:0 0 1 0 四中:0 0 0 1 |
所以,当咱们再来描述小明的时候,就能够采用 [1 0 1 0 0 0 1 0 0]
不少人在介绍独热编码的时候,都引用了下面这段代码,可是解释的比较模糊,下面详细解释一下。
from sklearn import preprocessing enc = preprocessing.OneHotEncoder() enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) #这里一共有4个数据,3种特征 array = enc.transform([[0,1,3]]).toarray() #这里使用一个新的数据来测试
print(array) # [[ 1 0 0 1 0 0 0 0 1]]
这里一共有四个数据,三种特征,是那四个呢,咱们列出矩阵
第一种 | 第二种 | 第三种 | |
第一个 | 0 | 0 | 3 |
第二个 | 1 | 1 | 0 |
第三个 | 0 | 2 | 1 |
第四个 | 1 | 0 | 2 |
咱们竖着看,能够看出第一种特征中只有0、1两类,第二组有0,、一、2三类,第三种有0、一、二、3四类,所以分别能够用二、三、4个状态类来表示。
enc.transform就是将[0,1,3]这组特征转换成one hot编码,toarray()则是转成数组形式。
第一个数为0,对应第一种特征则为 1 0;
第二个数为1,对应第二种特征则为 0 1 0;
第三个数为3,对应第三种特征则为 0 0 0 1。
因此最后的输出为:[[ 1 0 0 1 0 0 0 0 1]]
一样的,当咱们拿小明的表述[0,0,1]来测试的时候,获得了与第一个例子相同的结果。
from sklearn import preprocessing enc = preprocessing.OneHotEncoder() enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) #这里一共有4个数据,3种特征 array = enc.transform([[0,0,1]]).toarray() #这里使用一个新的数据来测试 print(array) [[1. 0. 1. 0. 0. 0. 1. 0. 0.]]