困惑于单热编码输出

时间:2018-04-30 07:57:03

标签: python scikit-learn one-hot-encoding

困惑为什么最终输出为[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])

1 个答案:

答案 0 :(得分:1)

这是您的训练数据:

  A    B    C    # <== feature names
  0    0    3
  1    1    0
  0    2    1
  1    0    2

现在正如您在enc.n_values_中看到的那样:array([2, 3, 4])

第一个特征A有两个可能的值= 0和1。 类似地,特征B具有三个可能的值= 0,1,2 ...

现在在输出中,将根据上述值为每个要素分配列数。 像这样:

A_0   A_1   B_0   B_1   B_2   C_0   C_1   C_2   C_3

这里A_0表示数据中存在0。因此,A_0将为1(热),A_1将为0.如果该数据中存在1,则A_1将为1(热),A_0将为0.

所以输入:   A B C.  [0,1,1]

这里,A = 0,所以A_0为1,其余A_1为0。 对于B,B = 1,所以B_1将为1而其他(B_0和B_2)将为0.对于C也是如此。

所以最终输出是:

A_0   A_1   B_0   B_1   B_2   C_0   C_1   C_2   C_3
 1.,    0.,  0.,   1.,   0.,   0.,   1.,   0.,   0.

请参阅此处了解详情:http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-features