关于OneHotEncoder输出[1.,0.,0.,1.,0.,0.,1.,0.,0.]的困惑咨询
搞懂sklearn OneHotEncoder的输出结果
嘿,我来帮你拆解这个让人困惑的输出,看完你就秒懂啦!
首先先看你得到的enc.n_values_ = array([2, 3, 4]),这个数组的每个数字对应你输入数据里每个特征的唯一类别数量:
- 第一个特征(输入的第一列:
0, 1, 0, 1):有2个唯一值{0,1},所以独热编码会占2个位置 - 第二个特征(输入的第二列:
0, 1, 2, 0):有3个唯一值{0,1,2},编码占3个位置 - 第三个特征(输入的第三列:
3, 0, 1, 2):有4个唯一值{0,1,2,3},编码占4个位置
把这三个编码长度加起来:2+3+4=9,正好和你拿到的输出数组长度一致!
接下来我们把输出[1., 0., 0., 1., 0., 0., 1., 0., 0.]拆成对应三个特征的部分,逐个解析:
第一个特征的编码(前2个元素):
[1., 0.]
OneHotEncoder会自动把每个特征的类别按从小到大排序,第一个特征的类别是0和1,所以编码规则是:- 特征值为
0→ 编码是[1, 0](第一个位置为1,其余为0) - 特征值为
1→ 编码是[0, 1](第二个位置为1,其余为0)
这里的[1,0]就说明第一个特征的取值是0
- 特征值为
第二个特征的编码(中间3个元素):
[0., 1., 0.]
第二个特征的类别排序后是0,1,2,对应编码规则:- 值
0→[1,0,0],值1→[0,1,0],值2→[0,0,1]
这个部分的[0,1,0]说明第二个特征的取值是1
- 值
第三个特征的编码(最后4个元素):
[0., 1., 0., 0.]
第三个特征的类别排序后是0,1,2,3,编码规则是:- 值
0→[1,0,0,0],值1→[0,1,0,0],值2→[0,0,1,0],值3→[0,0,0,1]
这里的[0,1,0,0]说明第三个特征的取值是1
- 值
简单来说,这个输出对应的输入样本应该是[[0, 1, 1]],把三个特征的独热编码按顺序拼接起来,就得到了你看到的9位数组~
内容的提问来源于stack exchange,提问作者Lin Ma
相关产品推荐
相关产品推荐

