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_)}