Вы можете использовать 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
, но он должен хорошо работать для небольшого числа классов.
Обновление:
Только что рассчитал его на LabelEncoder, чтобы соответствовать 10000 классов.Вот результаты:
%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop
Это на самом деле более производительно, чем я ожидал.