1

OneHotEncoder在我的项目中使用来自 Scikit-learn 的。而且我需要知道当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))
4

2 回答 2

1

这是你想要的?

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

>>> len(encoder.active_features_)
3
于 2016-10-13T16:22:41.930 回答
0

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

于 2016-10-13T18:57:33.367 回答