具有不同数量特征实例的多功能 One-Hot-Encoder
Multi-Feature One-Hot-Encoder with varying amount of feature instances
假设我们有这样的数据实例:
[
[15, 20, ("banana","apple","cucumber"), ...],
[91, 12, ("orange","banana"), ...],
...
]
我想知道如何对这些数据点的第三个元素进行编码。对于多个特征值,我们可以使用 sklearn 的 OneHotEncoder,但据我所知,它无法处理不同长度的输入。
这是我试过的:
X = [[15, 20, ("banana","apple","cucumber")], [91, 12, ("orange","banana")]]
ct = ColumnTransformer(
[
("genre_encoder", OneHotEncoder(), [2])
],
remainder='passthrough'
)
print(ct.fit_transform(X))
这只会输出
[[1.0 0.0 15 20]
[0.0 1.0 91 12]]
正如预期的那样,因为元组被处理为可以表示此功能的可能值。
我们不能直接嵌入我们的特征(比如[15, 12, "banana", "apple", "cucumber"]
),因为
- 我们不知道这个功能会有多少个实例(两个?三个?)
- 每个位置都将被解释为一个自己的特征,因此如果我们在一个数据点的第一个标称槽中有
banana
,而在我们的第二个标称槽中的第二个标称槽中有 banana
,它们将不会算作相同的一个特征可以体现的“价值池”
示例:
X = [["banana","apple","cucumber"], ["orange","banana", "cucumber"]]
enc = OneHotEncoder()
print(enc.fit_transform(X).toarray())
[[1. 0. 1. 0. 1.]
[0. 1. 0. 1. 1.]]
此表示包含 5 个插槽而不是 4 个,因为第一个插槽被解释为使用 banana
或 orange
,第二个插槽被解释为 apple
或 banana
和最后一个只有选项 cucumber
.
(这也不能解决每个数据点具有不同数量的特征值的问题。用 None
替换空值也不能解决问题,因为 None
面临这个位置歧义。)
知道如何对那些可以采用多个值并由不同数量的元素组成的“Multi-Multi-”特征进行编码吗?提前致谢!
我现在通过将其转换为 CountVectorizer 问题解决了它,感谢 David Maspis 的回答 on the datascience stackexchange。
假设我们有这样的数据实例:
[
[15, 20, ("banana","apple","cucumber"), ...],
[91, 12, ("orange","banana"), ...],
...
]
我想知道如何对这些数据点的第三个元素进行编码。对于多个特征值,我们可以使用 sklearn 的 OneHotEncoder,但据我所知,它无法处理不同长度的输入。
这是我试过的:
X = [[15, 20, ("banana","apple","cucumber")], [91, 12, ("orange","banana")]]
ct = ColumnTransformer(
[
("genre_encoder", OneHotEncoder(), [2])
],
remainder='passthrough'
)
print(ct.fit_transform(X))
这只会输出
[[1.0 0.0 15 20]
[0.0 1.0 91 12]]
正如预期的那样,因为元组被处理为可以表示此功能的可能值。
我们不能直接嵌入我们的特征(比如[15, 12, "banana", "apple", "cucumber"]
),因为
- 我们不知道这个功能会有多少个实例(两个?三个?)
- 每个位置都将被解释为一个自己的特征,因此如果我们在一个数据点的第一个标称槽中有
banana
,而在我们的第二个标称槽中的第二个标称槽中有banana
,它们将不会算作相同的一个特征可以体现的“价值池”
示例:
X = [["banana","apple","cucumber"], ["orange","banana", "cucumber"]]
enc = OneHotEncoder()
print(enc.fit_transform(X).toarray())
[[1. 0. 1. 0. 1.]
[0. 1. 0. 1. 1.]]
此表示包含 5 个插槽而不是 4 个,因为第一个插槽被解释为使用 banana
或 orange
,第二个插槽被解释为 apple
或 banana
和最后一个只有选项 cucumber
.
(这也不能解决每个数据点具有不同数量的特征值的问题。用 None
替换空值也不能解决问题,因为 None
面临这个位置歧义。)
知道如何对那些可以采用多个值并由不同数量的元素组成的“Multi-Multi-”特征进行编码吗?提前致谢!
我现在通过将其转换为 CountVectorizer 问题解决了它,感谢 David Maspis 的回答 on the datascience stackexchange。