【问题标题】:How to use one hot encoder on categorical data in scikit?如何在 scikit 中对分类数据使用一个热编码器?
【发布时间】:2016-05-08 15:03:13
【问题描述】:

我有以下类似于以下的数组(实际上是一个 Panda 数据帧,它具有类似数组的数据结构):

[
   ['M', 4, 15]
   ['M', 3, 7]
   ['F', 5, 9]
   ['I', 4, 15]
]

我希望对这些数据进行预处理,以便在线性回归中使用它。 我相信做到这一点的方法是使用一个热编码器:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder

但是,这仅在类别为整数时才有效。

我相信您可以使用 DictVectorizer: http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer 来做到这一点

但是,这似乎只适用于字典,而不是数组。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    使用类似于以下的代码将您的类别映射到整数:

    def tokenize(data, col_of_category):
        str_to_int, int_to_str = {}, {}
        for row in data:
            cat = row[col_of_category]
            if cat in str_to_int.keys(): token = str_to_int[cat]
            else:
                token = len(str_to_int.keys())
                str_to_int[cat] = token
                int_to_str[token] = cat
            row[col_of_category] = token # assuming your rows are mutable
        return str_to_int, int_to_str
    

    然后,您可以使用返回的字典来管理将来的映射和取消映射。然后您可以使用OneHotEncoder。您的算法并不关心是否涉及字符串。

    【讨论】:

      【解决方案2】:

      假设您的数据框 df 是这样的:

      >>> df
        col1  col2  col3
      0    M     4    15
      1    M     3     7
      2    F     5     9
      3    I     4    15
      

      要将col1转换为one-hot编码向量,可以使用pandas的@​​987654324@方法。

      >>> df = pd.get_dummies(df, columns=['col1'])
      >>> df
         col2  col3  col1_F  col1_I  col1_M
      0     4    15       0       0       1
      1     3     7       0       0       1
      2     5     9       1       0       0
      3     4    15       0       1       0
      

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 2020-06-02
        • 2019-10-08
        • 2020-10-06
        • 2020-11-12
        • 2021-09-11
        • 2018-07-16
        • 1970-01-01
        • 2018-04-28
        相关资源
        最近更新 更多