我正在使用以下代码将字符串标签列表映射到单热编码值列表:
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 值
和
integerMapping["green"]
应该返回所有“绿色”标签映射到的 int 值。
我怎样才能得到 integerMapping
字典?
最佳答案
您可以使用 LabelEncoder.classes_
和 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
示例用法:
classes = ['blue', 'green']
le = LabelEncoder()
le.fit(classes)
integerMapping = get_integer_mapping(le)
integerMapping['blue'] # Returns 0
integerMapping['green'] # Returns 1
如果您有大量的类,由于 for
循环,这可能不会很快,但它应该适用于少量的类。
更新:
刚刚在适合 10,000 个类的 LabelEncoder 上计时。以下是结果:
%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop
它实际上比我预期的更高效。
关于python - 从标签编码器获取标签映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50834820/