【问题标题】:OneHotEncoder confusion in scikit learnscikit learn 中的 OneHotEncoder 混淆
【发布时间】:2016-12-28 12:19:13
【问题描述】:

在 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.]])

问候, 林

【问题讨论】:

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


    【解决方案1】:

    n_values 是每个特征的值数。

    在这个例子中,

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

    (X的形状是[n_samples, n_feature])

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

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

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

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

    【讨论】:

    • 谢谢yangjie,所以这3个样本分别是[0, 1, 0, 1][0, 1, 2, 0][3, 0, 1, 2]?
    • 也对`[n_samples, n_feature], I thought it is n_samples` 行和n_feature 列感到困惑,但似乎并非如此,如果你能弄清楚,那就太好了。 :)
    • 它是n_samples 行和n_feature 列。 X中有4个样本,每个样本有3个特征。
    • 知道了,谢谢yangjie,你的描述比scikit learn文档清晰多了。 :)
    • 将您的回复标记为答案,以造福他人。 :)
    【解决方案2】:

    我认为上述关于 n_values_ 的解释并不完整和清晰。我的解释 :-
    有了这个:“n_values[i] 是分类值的数量 X[:, 我]。每个特征值都应该在 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,所以你可以通过列更清楚地看到它,数组中的每个值都给出了范围。

    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])
    

    这证明它对于分类数据来说是按列显示的,并且每个特征值都在范围内(n_values_)

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 2018-11-01
      • 2018-05-22
      • 2015-08-20
      • 2020-07-16
      • 2020-02-01
      • 2020-05-30
      • 2014-06-11
      相关资源
      最近更新 更多