获取从功能到一个热编码维度的映射

时间:2017-09-05 07:58:56

标签: python numpy scikit-learn

所以,目前我有一堆字符串分类功能,我正在转换为一个热编码,如下所示

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)

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

2 个答案:

答案 0 :(得分:2)

使用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}

答案 1 :(得分:1)

您可以使用LabelEncoder方法'classes_'来完成此操作。像这样:

import pyclamd
cd=pyclamd.ClamdAgnostic()
x=cd.scan_file('/home/john/Desktop/workSpace/yara/2.pdf')
if x is False: 
    print ("no ")
else :
    print ("Yes")