我在我的项目中使用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_
属性