【问题标题】:Get mappings from feature to one hot encoding dimension获取从特征到一个热编码维度的映射
【发布时间】:2017-09-05 16:29:15
【问题描述】:

所以,目前我有一堆字符串分类特征,我正在将它们转换为一个热编码,如下所示

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

X_str = np.array([['a', 'dog', 'red'], ['b', 'cat', 'green']])
# transform to integer
X_int = LabelEncoder().fit_transform(X_str.ravel()).reshape(*X_str.shape)
# transform to binary
X_bin = OneHotEncoder().fit_transform(X_int).toarray()

print(X_bin)
# [[ 1.  0.  0.  1.  0.  1.]
#  [ 0.  1.  1.  0.  1.  0.]]

这行得通。

但是,我正在尝试找出从特征到激活维度的映射

因此,例如,'a' 映射为 0(因为特征向量中的第 0 个索引设置为 1)

'b' 映射为 1(因为特征向量的第一个索引设置为 1)

'cat' 映射到 2(因为特征向量的第二个索引设置为 1)

所以,我想在字典中获取所有这些映射。 实现这些目标的好方法是什么。

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    使用LabelEncoder().classes_。这将是它的排列顺序。而且很可能是按字母顺序排列的。

    这意味着您需要保存LabelEncoder() 对象。像这样使用它:

    le = LabelEncoder()
    X_int = le.fit_transform(X_str.ravel()).reshape(*X_str.shape)
    
    print(le.classes_)
    #Out:- ['a' 'b' 'cat' 'dog' 'green' 'red']
    

    然后您可以使用:

    labels = le.classes_
    
    mappings = {}
    for index, label in zip(range(len(labels)), labels):
        mappings[label]=index
    
    print(mappings)
    #Out: {'a': 0, 'b': 1, 'dog': 3, 'cat': 2, 'green': 4, 'red': 5}
    

    【讨论】:

    • 谢谢.. 我有后续.. 如果我的功能类似于 X_str = np.array([[1, 'a', 'dog', 'red'], [2, 'b', 'dog', 'green']]) 现在 le 只会转换字符串 vars 但onehotencodenc 也会映射第一列..我如何获得他们的映射?
    • @Fraz 我不明白。如果您用给定的数据替换 X_str ,那么 labelEncoder 也会对它们进行编码。检查输出:- {'a': 2, 'b': 3, 'dog': 4, '1': 0, '2': 1, 'green': 5, 'red': 6}
    • @Fraz 看到数据中存在的 1 和 2 被编码为 '1' 和 '2' 。这是你想要的吗?
    【解决方案2】:

    您可以使用 LabelEncoder 方法 'classes_' 来完成这项工作。像这样的:

    #fit, instead of transform and store this
    X_enc = LabelEncoder().fit(X_str.ravel())
    enc_dct = {}
    for idx,items in enumerate(list(X_enc.classes_)):
      enc_dct[idx] = items
    print (enc_dct)
    #{0: 'a', 1: 'b', 2: 'cat', 3: 'dog', 4: 'green', 5: 'red'}
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2020-03-23
      • 2016-05-08
      相关资源
      最近更新 更多