如何在Scikit-learn中获得OneHotEncoder的维度数



我在我的项目中使用Scikit-learn的OneHotEncoder。我需要知道当n_value被设为auto时每个1热向量的大小是多少。我以为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))

这是你要找的吗?

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

我认为更好的解决方案是在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)

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

相关内容

  • 没有找到相关文章

最新更新