通常需要处理的数值都是稀疏而又散乱地分布在空间中,然而,我们并不需要存储这些大数值,这时可以用独热编码。
例如:我们需要处理4维向量空间,当给一个特征向量的第n个特征进行编码时,编码器会遍历每个特征向量的第n个特征,然后进行非重复计数。若第n个特征的最大值为K,则就把这个特征转换为只有一个值为1而其他值都是0的K+1维向量。
encoder=OneHotEncoder(sparse=False) 注:这里sparse是一个布尔值,指定结果是否稀疏。若sparse=True,则每个样本的独热码为一个稀疏矩阵(机器学习中稀疏矩阵的处理方式和Python实现)
每个样本(5个特征)经过独热码编码后转化成26个特征(6+5+4+5+6=26)
第一个原始特征最大值为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位编码。