【问题标题】:Encode a categorical feature with multiple categories per example每个示例对具有多个类别的分类特征进行编码
【发布时间】:2020-01-05 05:09:14
【问题描述】:

我正在研究一个数据集,该数据集的特征是单个示例具有多个类别。 该功能如下所示:-

                              Feature
0   [Category1, Category2, Category2, Category4, Category5]
1                     [Category11, Category20, Category133]
2                                    [Category2, Category9]
3                [Category1000, Category1200, Category2000]
4                                              [Category12]

问题与贴出的这个问题类似:-Encode categorical features with multiple categories per example - sklearn

现在,我想对这个特征进行矢量化。一种解决方案是按照上述类似问题的答案中的建议使用MultiLabelBinarizer。但是,大约有 2000 个类别,这导致了稀疏且非常高维的编码数据。

还有其他可以使用的编码吗?或者这个问题的任何可能的解决方案。谢谢。

【问题讨论】:

    标签: machine-learning scikit-learn feature-extraction categorical-data


    【解决方案1】:

    在很多情况下,当我遇到从具有许多类别的列中生成过多特征的问题时,我选择了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 个特征列而不是很多(例如,在 one-hot 的情况下为 1999) !

    【讨论】:

      【解决方案2】:

      给定一个非常稀疏的数组,可以使用诸如 PCA(主成分分析)之类的降维技术将特征空间减少到最能描述方差的前 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 个分量用作较小维度的特征空间,可以解释原始特征空间的很大一部分方差。

      如果您想了解新的较小特征空间描述方差的程度,您可以使用以下命令

      model.explained_variance_
      

      【讨论】:

        【解决方案3】:

        我也遇到了同样的问题,但我使用sklearn.feature_extraction.text 中的Countvectorizer 解决了,只需提供binary=True,即CounterVectorizer(binary=True)

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 2016-05-23
          • 2022-08-04
          • 2016-05-27
          • 1970-01-01
          • 2020-03-18
          • 2017-01-07
          • 2016-12-30
          • 1970-01-01
          相关资源
          最近更新 更多