【问题标题】:How to get number of dimensions in OneHotEncoder in Scikit-learn如何在 Scikit-learn 的 OneHotEncoder 中获取维数
【发布时间】:2016-10-13 15:25:36
【问题描述】:

我在我的项目中使用来自 Scikit-learn 的 OneHotEncoder。而且我需要知道当n_value 设置为auto 时每个单热向量的大小是多少。我以为n_value_ 会证明这一点,但似乎除了尝试训练样本之外我别无他法。我制作了这个玩具示例代码来显示问题。你知道其他解决方案吗?

from sklearn.preprocessing import OneHotEncoder

data = [[1], [3], [5]] # 3 different features

encoder = OneHotEncoder()
encoder.fit(data)

print(len(encoder.transform([data[0]]).toarray()[0])) # 3 number of dimensions in one-hot-vector
print(encoder.n_values_) # [6] == len(range(5))

【问题讨论】:

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


    【解决方案1】:

    这是你要找的吗?

    >>> encoder.active_features_
    array([1, 3, 5])
    
    >>> len(encoder.active_features_)
    3
    

    【讨论】:

      【解决方案2】:

      我认为更好的解决方案是在n_values 中定义矢量大小。因为与超出范围的特征编号相比,自动选项会产生缺少特征的奇怪行为。再次尝试这个例子,它会为缺失的数字生成零向量:

      from sklearn.preprocessing import OneHotEncoder
      
      data = [[1], [3], [5]] 
      
      encoder = OneHotEncoder()
      encoder.fit(data)
      
      print(encoder.transform([
                  [0],
                  [1],
                  [2],
                  [3],
                  [4],
                  [5]
              ]).toarray()) 
      

      结果如下:

      [[ 0.  0.  0.]
       [ 1.  0.  0.]
       [ 0.  0.  0.]
       [ 0.  1.  0.]
       [ 0.  0.  0.]
       [ 0.  0.  1.]]
      

      如果我尝试6它只会抛出错误:

      print(encoder.transform([[6]]).toarray()) 
      

      结果:

      ValueError: unknown categorical feature present [6] during transform.
      

      正如我之前提到的,最佳实践是从一开始就定义向量的大小:

      from sklearn.preprocessing import OneHotEncoder
      
      data = [[1], [3], [5]] 
      
      encoder = OneHotEncoder(n_values=50) # maximum size for my vocabulary, fits for my memory and my future development.
      encoder.fit(data)
      

      请记住,在这种情况下,active_features_ 将不再有任何 encoder 属性。

      【讨论】:

        猜你喜欢
        • 2018-11-01
        • 2016-12-28
        • 2020-02-01
        • 2020-01-25
        • 2018-08-02
        • 2020-02-25
        • 2012-12-08
        • 2020-11-02
        相关资源
        最近更新 更多