OneHotEncoder在scikit中的困惑学习

时间:2016-08-22 03:58:11

标签: python python-2.7 machine-learning scikit-learn one-hot-encoding

在Python 2.7中使用(miniconda解释器)。由以下关于OneHotEncoder的示例感到困惑,混淆了为什么enc.n_values_输出为[2, 3, 4]?如果有人能帮忙澄清,那就太好了。

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=<... 'float'>,
       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.]])

的问候, 林

2 个答案:

答案 0 :(得分:2)

n_values是每个要素的值数。

在此示例中,

X = 0 0 3
    1 1 0
    0 2 1
    1 0 2

(X&#39; s形状是[n_samples,n_feature])

对于第一个特征,有2个值:0,1;

对于第二个特征,有3个值:0,1,2。

对于第三个特征,有4个值:0,1,2,3。

因此,enc.n_values_[2, 3, 4]

答案 1 :(得分:0)

我认为以上关于n_values_的解释并不完整和清楚。我的解释:-
这样:“ n_values [i]是类别中分类值的数量 X [:, i]。每个要素值都应在range(n_values [i])范围内 这意味着n_values_在列中给出了范围(n_values [i])= [0,n_values)。

此处:

from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3], [1,2,3], [1,2,11] , [2,3,1]])
o.n_values_
array([3,4,12])

这里的结果是3,4,12,因此您可以通过colum更加清楚地看到它,数组中的每个值都给出了范围。

1 2 3
1 2 3
1 2 11
2 3 1

因此按列的值是range(3),range(4),range(12)。为了更清楚地理解,让我们再举一个例子:-

from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3,100], [1,2,3,200], [1,2,11,300] , [2,3,1,400]])
o.n_values_
array([ 3, 4, 12, 401])

这证明对于分类数据而言它看起来是按列的,并且每个特征值都在range(n_values_)内