Python 从标签编码器获取标签映射

Python 从标签编码器获取标签映射,python,python-3.x,machine-learning,scikit-learn,Python,Python 3.x,Machine Learning,Scikit Learn,我使用以下代码将字符串标签列表映射到一个热编码值列表: from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import OneHotEncoder labelEncoder = LabelEncoder() targets = ["blue","green","blue","blue","green"] integerEncoded = labelEncoder.fit_transfor

我使用以下代码将字符串标签列表映射到一个热编码值列表:

from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder  
labelEncoder = LabelEncoder()
targets = ["blue","green","blue","blue","green"]    
integerEncoded = labelEncoder.fit_transform(targets)
在以后的阶段中,我需要确切地知道哪些字符串标签映射到哪些整数值

也就是说,我需要这样的东西:

integerMapping = GetIntegerMapping(labelEncoder)
在哪里

integerMapping["blue"]
应返回所有“蓝色”标签映射到的int值

应返回所有“绿色”标签映射到的int值


我怎样才能得到
整数映射
命令

您可以使用
LabelEncoder.classes\uu
LabelEncoder.transform()
来获取所需的关系。下面的函数应该能满足您的需要

def get_integer_mapping(le):
    '''
    Return a dict mapping labels to their integer values
    from an SKlearn LabelEncoder
    le = a fitted SKlearn LabelEncoder
    '''
    res = {}
    for cl in le.classes_:
        res.update({cl:le.transform([cl])[0]})

    return res
用法示例: 如果您有大量的类,由于
for
循环,这可能不会太快,但对于少量的类来说应该可以很好地工作

更新: 刚刚在一个可容纳10000个班级的LabelEncoder上计时。结果如下:

%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop

实际上,它的性能比我预期的要高。

一旦安装了标签编码器,就会有一个
classes
属性。用于替换标签值的整数是此数组中标签的索引。因此,您可以通过以下方式获得映射:

le = LabelEncoder()
le.fit(targets)
integer_mapping = {l: i for i, l in enumerate(le.classes_)}

您可以制作一个映射目标和编码整数的字典


integerMapping=dict(zip(targets,integerEncoded))

是的,对不起。le是LabelEncoder实例。我更新了答案和文档字符串。我只是添加了示例用法来澄清。下面是一些指南。提供的答案可能是正确的,但可以从解释中获益。仅代码答案不被视为“好”答案。从…起
%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop
le = LabelEncoder()
le.fit(targets)
integer_mapping = {l: i for i, l in enumerate(le.classes_)}