【问题标题】:Backtracking categorical features from one-hot-encoding in scikit-learn?从 scikit-learn 中的 one-hot-encoding 回溯分类特征?
【发布时间】:2016-03-02 07:16:48
【问题描述】:

我正在尝试构建一个套索回归预测模型。我在 scikit-learn 中使用 OneHotEncoder 使用 one-hot aka one-of-K 方案对所有分类整数特征进行编码。根据结果​​,实际上只有 51 个参数会影响预测模型。我想调查这些参数,但它们的编码如上所述。您知道如何提取哪个分类整数特征对应于哪个热编码数组吗? 谢谢!

【问题讨论】:

标签: python encoding machine-learning scikit-learn one-hot-encoding


【解决方案1】:

这行得通:

import pickle


with open('model.pickle', 'rb') as handle:
    one_hot_categories = pickle.load(handle)      


print(one_hot_categories.categories_)

【讨论】:

    【解决方案2】:

    我设计了 ple 来增强 sklearn 的 Pipeline 和 FeatureUnion,通过它我们还可以在 one-hot-encoding 或其他预处理步骤之后回溯分类特征。此外,我们可以通过 GraphX 来“绘制”变换:例如,

    你可以在my Github page找到ple。

    【讨论】:

      【解决方案3】:

      使用 sklearn.preprocessing.OneHotEncoderactive_features_feature_indices_n_values_ 属性,按“位置”排序的分类特征向量one-hot数组中的创建方式如下:

      import numpy as np
      from sklearn import preprocessing
      
      enc = preprocessing.OneHotEncoder()
      enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
      enc.active_features_ - np.repeat(enc.feature_indices_[:-1], enc.n_values_)
      # array([0, 1, 0, 1, 2, 0, 1, 2, 3], dtype=int64)
      

      另外,可以从 one-hot 数组中返回原始数据,如下所示:

      x = enc.transform([[0, 1, 1], [1, 2, 3]]).toarray()
      # array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.],
      #       [ 0.,  1.,  0.,  0.,  1.,  0.,  0.,  0.,  1.]])
      
      cond = x > 0
      [enc.active_features_[c.ravel()] - enc.feature_indices_[:-1] for c in cond]
      # [array([0, 1, 1], dtype=int64), array([1, 2, 3], dtype=int64)]
      

      【讨论】:

        猜你喜欢
        • 2019-10-28
        • 2017-05-11
        • 2021-11-12
        • 1970-01-01
        • 2015-01-12
        • 2021-08-05
        • 2020-08-08
        • 2014-02-17
        • 1970-01-01
        相关资源
        最近更新 更多