每个示例使用多个类别对分类特征进行编码
Encode a categorical feature with multiple categories per example
我正在处理一个数据集,该数据集具有一个示例具有多个类别的特征。
该功能如下所示:-
Feature
0 [Category1, Category2, Category2, Category4, Category5]
1 [Category11, Category20, Category133]
2 [Category2, Category9]
3 [Category1000, Category1200, Category2000]
4 [Category12]
问题类似于发布的这个问题:-
现在,我想矢量化这个特征。一种解决方案是按照上述类似问题的答案中的建议使用 MultiLabelBinarizer
。但是,大约有 2000 个类别,这导致了稀疏和非常高维度的编码数据。
还有其他编码可以使用吗?或者这个问题的任何可能的解决方案。谢谢
在很多情况下,当我遇到从具有多个类别的列生成太多特征的问题时,我选择了 binary encoding,并且大多数时候效果很好,因此值得一试你也许。
假设你有 9 个特征,你将它们标记为 1 到 9,然后对它们进行二进制编码,你将得到:
cat 1 - 0 0 0 1
cat 2 - 0 0 1 0
cat 3 - 0 0 1 1
cat 4 - 0 1 0 0
cat 5 - 0 1 0 1
cat 6 - 0 1 1 0
cat 7 - 0 1 1 1
cat 8 - 1 0 0 0
cat 9 - 1 0 0 1
这是二进制编码器背后的基本直觉。
PS: 假设 2 的 11 次方是 2048,并且您可能有 2000 个左右的类别,您可以将类别减少到 11 个特征列而不是很多(例如,1999 in one-hot的情况)!
给定一个非常稀疏的数组,可以使用诸如 PCA(主成分分析)之类的降维技术将特征 space 减少到最能描述方差的前 k 个特征。
假设 MultiLabelBinarizered 2000 特征 = X
from sklearn.decomposition import PCA
k = 5
model = PCA(n_components = k, random_state = 666)
model.fit(X)
Components = model.predict(X)
然后您可以将前 K 个分量用作较小维度的特征 space,它可以解释原始特征的大部分方差 space。
如果您想了解新的较小特征 space 描述方差的程度,您可以使用以下命令
model.explained_variance_
我也遇到了同样的问题,但我使用 sklearn.feature_extraction.text
中的 Countvectorizer
解决了 binary=True
,即 CounterVectorizer(binary=True)
我正在处理一个数据集,该数据集具有一个示例具有多个类别的特征。 该功能如下所示:-
Feature
0 [Category1, Category2, Category2, Category4, Category5]
1 [Category11, Category20, Category133]
2 [Category2, Category9]
3 [Category1000, Category1200, Category2000]
4 [Category12]
问题类似于发布的这个问题:-
现在,我想矢量化这个特征。一种解决方案是按照上述类似问题的答案中的建议使用 MultiLabelBinarizer
。但是,大约有 2000 个类别,这导致了稀疏和非常高维度的编码数据。
还有其他编码可以使用吗?或者这个问题的任何可能的解决方案。谢谢
在很多情况下,当我遇到从具有多个类别的列生成太多特征的问题时,我选择了 binary encoding,并且大多数时候效果很好,因此值得一试你也许。
假设你有 9 个特征,你将它们标记为 1 到 9,然后对它们进行二进制编码,你将得到:
cat 1 - 0 0 0 1
cat 2 - 0 0 1 0
cat 3 - 0 0 1 1
cat 4 - 0 1 0 0
cat 5 - 0 1 0 1
cat 6 - 0 1 1 0
cat 7 - 0 1 1 1
cat 8 - 1 0 0 0
cat 9 - 1 0 0 1
这是二进制编码器背后的基本直觉。
PS: 假设 2 的 11 次方是 2048,并且您可能有 2000 个左右的类别,您可以将类别减少到 11 个特征列而不是很多(例如,1999 in one-hot的情况)!
给定一个非常稀疏的数组,可以使用诸如 PCA(主成分分析)之类的降维技术将特征 space 减少到最能描述方差的前 k 个特征。
假设 MultiLabelBinarizered 2000 特征 = X
from sklearn.decomposition import PCA
k = 5
model = PCA(n_components = k, random_state = 666)
model.fit(X)
Components = model.predict(X)
然后您可以将前 K 个分量用作较小维度的特征 space,它可以解释原始特征的大部分方差 space。
如果您想了解新的较小特征 space 描述方差的程度,您可以使用以下命令
model.explained_variance_
我也遇到了同样的问题,但我使用 sklearn.feature_extraction.text
中的 Countvectorizer
解决了 binary=True
,即 CounterVectorizer(binary=True)