机器在Python中倾向于OneHotEncoding

时间:2017-10-08 14:00:47

标签: python machine-learning scikit-learn data-analysis sklearn-pandas

我是机器学习的新手scikit-learn。我正在浏览文档并尝试使用一些示例数据OneHotEncoder()。有人可以解释一下encoder.feature_indices_发生了什么,以及我如何将Encoded_Vector的输出作为[[ 0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]。任何帮助表示赞赏。谢谢!

>>> from sklearn import preprocessing
>>> encoder = preprocessing.OneHotEncoder()
>>> encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4,3]])
    OneHotEncoder(categorical_features='all', dtype=<type 'numpy.float64'>,
   handle_unknown='error', n_values='auto', sparse=True)
>>> encoder.n_values_
array([ 3,  4,  6, 13])    
>>> encoder.feature_indices_
array([ 0,  3,  7, 13, 26])
>>> vector_encoded = encoder.transform([[2,3,5,3]]).toarray()
>>> print "\nEncoded_Vector =",vector_encoded
Encoded_Vector = [[ 0.  0.  1.  0.  1.  0.  0.  0.  1.  1.  0.]]
>>>

到目前为止,我的理解是

输入

0 2 1 12

1 3 5 3

2 3 2 12

1 2 4 3

这是4列/功能和4行。每列具有不同数量的唯一实体。如果我跑:

enc.n_values_

它给出:数组([3,4,6,13])

所以每个功能的类别都是:

要素1可以取3个值:0 1 2

特征2可以取4个值:0 1 2 3

特征3可以取6个值:0 1 2 3 4 5

特征4可以取13个值:0 1 2 3 4 5 6 7 8 9 10 11 12

1 个答案:

答案 0 :(得分:0)

即使您说您的功能可能总共需要3,4,6或13个值,但您提供的数据示例([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4,3]])并未涵盖您的各种数据。

你的例子基本上说:

  • 要素1可以取3个值(0,1,2)
  • 功能2可以采用2个值(2,3)
  • 功能3可以采用4个值(1,2,4,5)
  • 功能4可以采用2个值(3,12)

这最终总共有11个值。因此,OneHotEncoding([[ 0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]])的输出有11个值,可以分为4个部分:

  • [0。 0. 1.]是特征1的编码
  • [0。 1.]是功能2的编码
  • [0。 0. 0。1.]是特征3的编码
  • [1。 0.]是特征4的编码

&#34; 1的位置。&#34;在数组中将告诉您变量的值(尝试在编码之前和编码之后匹配示例)。