数据预处理中常见的哑编码/独热编码(One-Hot Encoding)详解(一看就懂)

时间:2024-04-01 08:58:16

通常需要处理的数值都是稀疏而又散乱地分布在空间中,然而,我们并不需要存储这些大数值,这时可以用独热编码。

例如:我们需要处理4维向量空间,当给一个特征向量的第n个特征进行编码时,编码器会遍历每个特征向量的第n个特征,然后进行非重复计数。若第n个特征的最大值为K,则就把这个特征转换为只有一个值为1而其他值都是0的K+1维向量。

数据预处理中常见的哑编码/独热编码(One-Hot Encoding)详解(一看就懂)

encoder=OneHotEncoder(sparse=False) 
注:这里sparse是一个布尔值,指定结果是否稀疏。若sparse=True,则每个样本的独热码为一个稀疏矩阵(机器学习中稀疏矩阵的处理方式和Python实现

每个样本(5个特征)经过独热码编码后转化成26个特征(6+5+4+5+6=26)

数据预处理中常见的哑编码/独热编码(One-Hot Encoding)详解(一看就懂)

第一个原始特征最大值为5,因此第一个原始特征取值种类为6种(0,1,2,3,4,5),则原始数据用一个六源元组来编码 
如:0编码为(1,0,0,0,0,0) 
encoder.active_features_给出了**特征 
(1)第一个原始特征没有出现数值为0,2,4,因此转化后的26个特征中,对应编码的特征未**(转化后的特征下标为0,2,4) 
(2)第一个原始特征没有出现数值为0,因此转化后的26个特征中,对应编码的特征未**(转化后的特征下标为6) 
(3)第一个原始特征没有出现数值为0,2,因此转化后的26个特征中,对应编码的特征未**(转化后的特征下标为11,13) 
(4)第一个原始特征没有出现数值为0,因此转化后的26个特征中,对应编码的特征未**(转化后的特征下标为15) 
(5)第一个原始特征没有出现数值为0,2,4,因此转化后的26个特征中,对应编码的特征未**(转化后的特征下标为20,22,24) 
因此**特征数组为[1 3 5 7 8 9 10 12 14 16 17 18 19 21 23 25] 
注:未**特征在所有样本上的取值为0

encoder.feature_indices_给出了每个原始特征在转换后特征的起始区间: 
(1)第一个原始特征在转换后特征的区间[0,6) 
(2)第二个原始特征在转换后特征的区间[6,11) 
(1)第三个原始特征在转换后特征的区间[11,15) 
(1)第四个原始特征在转换后特征的区间[15,20) 
(1)第五个原始特征在转换后特征的区间[20,26)

n_values_给出了每个原始属性的取值的种类:6,5,4,5,6 
注:n_values是一个数组,存放每个属性取值的种类,一般为训练数据中该属性取值的最大值加1,因为默认每个属性取值从0开始

样本[1,2,3,4,5]经过独热编码之后的值为[1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1]。这里本该26位编码,但是考虑到剔除未**特征,只给出了**特征,因此这里只有16位编码。