如何在 Scikit-learn 的 OneHotEncoder 中获取维数
How to get number of dimensions in OneHotEncoder in Scikit-learn
我在我的项目中使用来自 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))
这是您要找的吗?
>>> 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_
属性。
我在我的项目中使用来自 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))
这是您要找的吗?
>>> 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_
属性。