Labelencoder Python sklearn с категориальными ячейками

Я занимаюсь преобразования вручную, но есть ли способ, чтобы использовать ячейки или диапазоны с sklearn по labelencoder:

le = LabelEncoder()
A = ["paris", "memphis"]
B = ["tokyo", "amsterdam"]
le.fit([A,B])
print(le.transform(["tokyo", "memphis", "paris","tokyo", "amsterdam"]))

нужный выход --> [2,1,1,2,2]

или вы можете себе представить, используя возрастные диапазоны, расстояния и т. д. Есть ли способ сделать это?

1 ответов


насколько я знаю, нет способа сделать это с помощью LabelEncoder, но создание пользовательской функции преобразования должно работать.

Edit: обновленный код для работы с элементами, которые происходят в обоих или ни в одном из бункеров.

from sklearn.base import TransformerMixin

class BinnedLabelEndcoder(TransformerMixin):       

    def transform(self, X, *_, start_index=1):
        result = []
        for item in X:
            for group_id, group in enumerate(self.group_list):
                if item in group:
                    result.append(group_id + start_index)
                    break
            else:
                result.append(None)
        return result

    def fit(self, group_list, *_):
        self.group_list = group_list
        return self

вы можете использовать это с кодом из вашего вопроса:

le = BinnedLabelEndcoder()
A = ["paris", "memphis"]
B = ["tokyo", "amsterdam"]
le.fit([A,B])
print(le.transform(["tokyo", "memphis", "paris","tokyo", "amsterdam"]))

выход

[2, 1, 1, 2, 2]